Remove compegps, cst, g7towin, gopal, gpsman, gpsutil, jogmap, jtr, maggeo, mapsend...
authorGPSBabel <12013583+GPSBabelDeveloper@users.noreply.github.com>
Thu, 9 Dec 2021 21:36:24 +0000 (16:36 -0500)
committerGitHub <noreply@github.com>
Thu, 9 Dec 2021 21:36:24 +0000 (16:36 -0500)
* Remove compegps, cst, g7to2in, gopal, gpsutil, jtr, maggeo, mapsend,
nm4, pcx, pocketfms, skyforce, stmsdf, stmwpp, tiger, vpl, wfff, and yahoo.

* Missing reference files from above.

* Change classic-3 test to read gzipped NMEA instead of deprecated formats.

* Drop gpsutil from tomtom test as it tested nothing unique.

* Remove gpsman test. It's a unicsv test and this tests nothing of value.

* Eliminate use of gpsutil in gpx test; it covered no unique paths.

* Update other GPSBabel.pro :-(

* Update Cmaeklists enough for successful Mac compile

* Cleanup internal doc references to newly retired formats.

* Scrub (and commit) the remaining doc changes for what we just deleted.

* Squashed commit of the following:

commit 40429dd3db113c30652e8e66b2a38237f1edbf39
Author: tsteven4 <13596209+tsteven4@users.noreply.github.com>
Date:   Mon Dec 6 16:37:53 2021 -0700

    fix dotnet time conversion (#784)

commit 54b013699f755b9a34f730c9f90729a2961b2704
Author: tsteven4 <13596209+tsteven4@users.noreply.github.com>
Date:   Mon Dec 6 07:13:44 2021 -0700

    Kill CarteSurTable format. (#783)

    Apparently it hasn't ever been used.  Our sample has coordinates in UTM,
    but we have been interpretting them as degrees/100000.  "Le pic du midi"
    referred to in the sample is The Pic du Midi de Bigorre.

commit 1ed58953b7a50c9a5e994e3d8d35055bef007fcd
Author: tsteven4 <13596209+tsteven4@users.noreply.github.com>
Date:   Sun Dec 5 15:30:05 2021 -0700

    harden gbfgetcstr, gbfgetpstr. (#782)

    Hangs were detected with afl and the gdb reader and gbfgetcstr.  One such
    hang reads a fuzzed 32 bit url count with FREAD_i32, and then proceeds
    to fetch that many strings with FREAD_CSTR_AS_QSTR.  This results in
    fetches from beyond EOF that are undetected.  gbfgetcstr_old is modified
    to throw a fatal error if reading is attempted beyond EOF.

    A similar failure was not detected with gbfgetpstr, but it is also
    modified to throw a fatal error if reading is attempted beyond EOF.

commit 85502cb3fd168287a24c5b14fa038cc0f02922eb
Author: tsteven4 <13596209+tsteven4@users.noreply.github.com>
Date:   Fri Dec 3 07:16:02 2021 -0700

    hopefully the real fix for garmin_xt tool issues. (#781)

    Fix LGTM detected "Comparison between i of type uint8_t and Count of
    wider type int."

    This latest find by LGTM is one in a long series of issue detections by
    various tools.  However, close analysis reveals the previous solutions
    to these deteced issues didn't find or fix the real root issues:

    commit 233f3c8b0bf69397403b6c1f29af8e10a65a8928, 10/22/2013, Pad
    internal buffer to appease -fsanitize=address.  While the fix appeased
    the sanitizer, it didn't fix the root problem.  The root problem was
    a bug in the original translation of format_garmin_xt_decrypt_trk_blk
    when converting to zero-based array indexing.

    commit dcf0dd85a71c6fa5fc3dac72520c2070ba051108, 7/8/2015, A bunch of
    busy work to satisfy hyperactive warnings in newer GCC builds.  Again,
    the fix didn't fix the root problem.  The root problem was a bug in the
    original translation of format_garmin_xt_proc_strk.  This bug resulted
    in a mismatch between our test output and that of the original project.
    In our output the timestamp of the last two points in a track was
    identical.

    This fix results in our output matching the reference file of the original
    project (with allowances for precision).

commit 727df5268184fb42a14963002cc77c5c9cf5d692
Author: tsteven4 <13596209+tsteven4@users.noreply.github.com>
Date:   Wed Dec 1 17:17:40 2021 -0700

    retire cet (#777)

    * teach mkshort to split utf8 on grapheme boundaries.

    and retire some cet functions.

    * add the grapheme test.

    * wean gbfile from cet.

    * restore cet.cc, cet.h in prepare for deprecation.

    * retire cet.cc, cet.h

    * drop attempted support of \r line endings in gbfgetutf16str.

    * add test of surrogate pairs for gbfgetutf16str.

    * fix test

commit 2371d119a57005dd7db23dfcfe576e7608074a67
Author: tsteven4 <13596209+tsteven4@users.noreply.github.com>
Date:   Wed Dec 1 13:11:33 2021 -0700

    add lgtm configuration file (#780)

commit 16820556e11349523ee7094dc9cd504515070a27
Author: tsteven4 <13596209+tsteven4@users.noreply.github.com>
Date:   Wed Dec 1 12:40:38 2021 -0700

    move Qt6 CI builds to 6.2.2. (#779)

commit d377ef65af27e5a0e48d8b4017cc76517e305dfc
Author: tsteven4 <13596209+tsteven4@users.noreply.github.com>
Date:   Wed Dec 1 06:26:08 2021 -0700

    convert arcdist, polygon, and xcsv to use gpsbabel::TextStream instead of gbfgetstr (#778)

    * read style files with a textstream.

    * use gpsbabel::textstream instead of gbfile.

commit f2da18dc2edba69639e51fbe3c7ef8ef161d8eea
Merge: 41cdf06b 23414450
Author: tsteven4 <13596209+tsteven4@users.noreply.github.com>
Date:   Tue Nov 30 15:46:26 2021 -0700

    Merge pull request #776 from tsteven4/nits3

    miscellaneous minor fixes III

commit 41cdf06b34975cbb1b2b1fb848002465803ce280
Author: tsteven4 <13596209+tsteven4@users.noreply.github.com>
Date:   Mon Nov 29 07:29:41 2021 -0700

    move Qt 5.12 CI builds to 5.12.12 (#774)

commit 2341445085d9f3c3b354c17f9f2527f5de673ee1
Author: tsteven4 <13596209+tsteven4@users.noreply.github.com>
Date:   Sun Nov 28 07:44:28 2021 -0700

    remove support for non standard entity replacements.

    This was disabled in d47e364f5 August 29, 2005.

commit dd56f42f5ce0a3ade1ce7b377a1da7a718f037ec
Author: tsteven4 <13596209+tsteven4@users.noreply.github.com>
Date:   Sat Nov 27 23:37:59 2021 -0700

    fix lgtm detected ill-defined for loop.

commit 59a325d14074bbd9abe32b165b1e10bbb5c69ffa
Merge: 56c86e2b 07694790
Author: tsteven4 <13596209+tsteven4@users.noreply.github.com>
Date:   Sat Nov 27 17:45:30 2021 -0700

    Merge pull request #772 from tsteven4/lgtm

    miscellaneous minor fixes

commit 0769479009f18e10eb131317710ded627db38482
Author: tsteven4 <13596209+tsteven4@users.noreply.github.com>
Date:   Fri Nov 26 14:42:42 2021 -0700

    sequester temporary style files in TMPDIR

commit 3f38cef6bcede6f58cd4e91fb796e84cc978dd5c
Author: tsteven4 <13596209+tsteven4@users.noreply.github.com>
Date:   Thu Nov 25 10:09:04 2021 -0700

    prefer rte_waypt_ct() over waypoint_list.count().

    this provides some insulation from the underlying WaypointList
    container.

commit bdd7865e7b4ee5ec1b61e94abd9ce63b4eb71aaf
Author: tsteven4 <13596209+tsteven4@users.noreply.github.com>
Date:   Thu Nov 25 08:37:57 2021 -0800

    sort SOURCES and HEADERS in build.

    this gives a reasonable initial project view in Xcode.
    this gives a resaonable order to compilation.

commit dd735b6e8443965d1e5cf47a4b83daf72fa4370c
Author: tsteven4 <13596209+tsteven4@users.noreply.github.com>
Date:   Wed Nov 24 11:11:15 2021 -0800

    minor correction to resample doc.

commit f7d3d60b1ac516061c73a05acb4f93b66def95c9
Author: tsteven4 <13596209+tsteven4@users.noreply.github.com>
Date:   Wed Nov 24 10:30:58 2021 -0800

    further minimize xcsv_get_char_from_constant_table

commit f483fc350f8aab14a54de7a71374c16f0988f000
Author: tsteven4 <13596209+tsteven4@users.noreply.github.com>
Date:   Wed Nov 24 09:51:14 2021 -0800

    use list initialization to construct xcsv char map table.

commit d62f479f0767cd545165ad1fcd1b734fe33eb1c2
Author: tsteven4 <13596209+tsteven4@users.noreply.github.com>
Date:   Wed Nov 24 08:52:22 2021 -0800

    more nits.

commit b2957b54db7d208183ab862990c06574a6c088c0
Author: tsteven4 <13596209+tsteven4@users.noreply.github.com>
Date:   Tue Nov 23 16:09:14 2021 -0800

    limit variable scope, found by LGTM.

    Poor global variable name 'ops'. Prefer longer, descriptive names for globals (eg. kMyGlobalConstant, not foo).

commit 56c86e2bc6ff0413da1057e144a3e899b320f8a8
Author: tsteven4 <13596209+tsteven4@users.noreply.github.com>
Date:   Tue Nov 23 09:40:30 2021 -0700

    fix parsing of nmea hms fields. (#770)

commit fa20976bcbedc72cd37100fa40c67a9d299b1b0e
Author: tsteven4 <13596209+tsteven4@users.noreply.github.com>
Date:   Sun Nov 21 14:04:55 2021 -0700

    Introduce resampling filter and nvectors. (#763)

    * Introduce resampling filter and nvectors.

    * use ellipsoid model with nvectors.

    the code had been forcing a spherical earth model to match the
    existing grtcirc.cc calculations.

commit 1a422a68320c6c5449bfee0f28a8da0a65697168
Author: tsteven4 <13596209+tsteven4@users.noreply.github.com>
Date:   Sun Nov 21 14:04:03 2021 -0700

    improve string handling, fix 9 year old FIXME. (#769)

commit e09f7fe5996073abf414b3bc2897c8dd84d2429a
Author: tsteven4 <13596209+tsteven4@users.noreply.github.com>
Date:   Sun Nov 21 13:34:23 2021 -0700

    support generation of xcode project files with qmake. (#760)

commit ff76e254a269c772da3cf7df94b1cab6b8dab1dc
Author: tsteven4 <13596209+tsteven4@users.noreply.github.com>
Date:   Sat Nov 20 08:05:01 2021 -0700

    update fit locations test with improved sample (#767)

    * update fit test with improved sample.

    * reference file mode correction.

commit 67ad13daaaf8d3dee5a1c7643d9c489ef7bc125d
Author: tsteven4 <13596209+tsteven4@users.noreply.github.com>
Date:   Fri Nov 19 06:48:53 2021 -0700

    Pick up fit locations test case (#766)

    * Add support for Locations.fit files

    * patch by tsteven4 to address review comments

    * Add a test case for Locations.fit files from Garmin devices

Co-authored-by: Fabrizio Gennari <fabrizio.ge@tiscali.it>
commit 368ad391c3a737058dec9fe82e3c33925add9027
Author: tsteven4 <13596209+tsteven4@users.noreply.github.com>
Date:   Thu Nov 18 16:40:49 2021 -0700

    add test for fit Locations(Lctns) files. (#765)

    * add test for fit Locations(Lctns) files.

    * fix new bug with change in Qt6 behavior for fit.

commit 871efe320b27bacecd7c98e9f7c0236b83ed9122
Author: fabzzap <fabrizio.ge@tiscali.it>
Date:   Thu Nov 18 22:07:59 2021 +0100

    Add support for Locations.fit files (#762)

    * Add support for Locations.fit files

    * patch by tsteven4 to address review comments

commit 2504d97daa490ddb4d0071e219fc4efbff98343a
Author: tsteven4 <13596209+tsteven4@users.noreply.github.com>
Date:   Wed Nov 17 08:52:08 2021 -0700

    Eliminiate redundant route_head data member (#764)

    eliminate redundant route_head data member rte_waypt_ct, replacing it with a member function rte_waypt_ct() that gets the count from the waypoint_list container.

commit 0beebdd5ecd9cadbb0219a5d9682a240a38a2170
Author: tsteven4 <13596209+tsteven4@users.noreply.github.com>
Date:   Mon Nov 8 05:22:30 2021 -0700

    kill xmap, xmap2006. (#758)

    * kill xmap, xmap2006.

    * dprecate obsolete readme.

commit 6593293ad8fee54764a9905064d4a647e553cd3f
Author: tsteven4 <13596209+tsteven4@users.noreply.github.com>
Date:   Fri Nov 5 15:13:05 2021 -0600

    kill xmapwpt. (#757)

    note is was wounded previously, see #754.

commit 7b6235ce627e9abac6c7ea34b9560935ad56483d
Author: tsteven4 <13596209+tsteven4@users.noreply.github.com>
Date:   Fri Nov 5 13:01:00 2021 -0600

    add fedora 35 to CI. (#756)

commit c3bc9c804ec84292f7a851ddbfba92f3c544e3ac
Author: tsteven4 <13596209+tsteven4@users.noreply.github.com>
Date:   Fri Nov 5 11:17:45 2021 -0600

    serial port names (#755)

    * try qserialportinfo again.

    * update docker images with qt serial port.

    * enhance windows device text to match device manager on windows.

* gbfile test can't depend on PCX any longer.\n Might be a hole in coverage.

* Remove vitosmt and vitovtt.

* Remove jogmap vidaone yahoo

* Remove gpsman.

* Remove more crumbs of g7towin.

* Run automated cleanup on the list of files in commit message to clean up last pieces.

* keep gpsutil.h in GPSBabel.pro

Co-authored-by: Robert Lipe <robertlipe@gmail.com>
201 files changed:
CMakeLists.txt
GPSBabel.pro
compegps.cc [deleted file]
deprecated/compegps.cc [new file with mode: 0644]
deprecated/g7towin.cc [new file with mode: 0644]
deprecated/gopal.cc [new file with mode: 0644]
deprecated/gpsman.style [new file with mode: 0644]
deprecated/gpsutil.cc [new file with mode: 0644]
deprecated/jogmap.cc [new file with mode: 0644]
deprecated/jtr.cc [new file with mode: 0644]
deprecated/maggeo.cc [new file with mode: 0644]
deprecated/mapsend.cc [new file with mode: 0644]
deprecated/mapsend.h [new file with mode: 0644]
deprecated/nmn4.cc [new file with mode: 0644]
deprecated/pcx.cc [new file with mode: 0644]
deprecated/pocketfms_bc.cc [new file with mode: 0644]
deprecated/pocketfms_fp.cc [new file with mode: 0644]
deprecated/pocketfms_wp.cc [new file with mode: 0644]
deprecated/skyforce.cc [new file with mode: 0644]
deprecated/stmsdf.cc [new file with mode: 0644]
deprecated/stmwpp.cc [new file with mode: 0644]
deprecated/tiger.cc [new file with mode: 0644]
deprecated/vidaone.cc [new file with mode: 0644]
deprecated/vitosmt.cc [new file with mode: 0644]
deprecated/vitovtt.cc [new file with mode: 0644]
deprecated/vpl.cc [new file with mode: 0644]
deprecated/wfff_xml.cc [new file with mode: 0644]
deprecated/yahoo.cc [new file with mode: 0644]
deprecated/yahoo.h [new file with mode: 0644]
g7towin.cc [deleted file]
gopal.cc [deleted file]
gpsman [deleted file]
gpsman2 [deleted file]
gpsutil.cc [deleted file]
internal_styles.cc
jogmap.cc [deleted file]
jtr.cc [deleted file]
maggeo.cc [deleted file]
mapsend.cc [deleted file]
mapsend.h [deleted file]
msvc/GPSBabel.vcxproj
msvc/GPSBabel.vcxproj.filters
nmn4.cc [deleted file]
pcx.cc [deleted file]
pocketfms_bc.cc [deleted file]
pocketfms_fp.cc [deleted file]
pocketfms_wp.cc [deleted file]
reference/compegps-wpt.gpx [deleted file]
reference/compegps.wpt [deleted file]
reference/compegps.wpt.gz [deleted file]
reference/compegps_time.wpt [deleted file]
reference/compegps_time_wpt.gpx [deleted file]
reference/expertgps-g7t.txt [deleted file]
reference/expertgps.g7t [deleted file]
reference/format0.txt
reference/format1.txt
reference/format2.txt
reference/format3.txt
reference/gopal-11-gpx.gpx [deleted file]
reference/gopal-11.trk [deleted file]
reference/gpsutil-1.pcx [deleted file]
reference/help.txt
reference/ov2-in.ref [deleted file]
reference/pocketfms_bc [deleted file]
reference/pocketfms_bc.babel [deleted file]
reference/pocketfms_bc.gpx [deleted file]
reference/pocketfms_fp.gpx [deleted file]
reference/pocketfms_fp.xml [deleted file]
reference/pocketfms_wp.gpx [deleted file]
reference/pocketfms_wp.txt [deleted file]
reference/skyforce.gpx [deleted file]
reference/skyforce_wpt.gpx [deleted file]
reference/skyforce_wpt.txt [deleted file]
reference/stmsdf.txt [deleted file]
reference/vitosmt.gpx [deleted file]
reference/vitosmt.smt [deleted file]
reference/waypoints.nmea.gz [new file with mode: 0644]
reference/wfff.gpu [deleted file]
reference/wfff.xml [deleted file]
reference/yahoo.csv [deleted file]
reference/yahoo.xml [deleted file]
skyforce.cc [deleted file]
stmsdf.cc [deleted file]
stmwpp.cc [deleted file]
style/gpsman.style [deleted file]
testo.d/classic-3.test
testo.d/compegps.test [deleted file]
testo.d/csv.test [deleted file]
testo.d/deprecated/compegps.test [new file with mode: 0644]
testo.d/deprecated/csv.test [new file with mode: 0644]
testo.d/deprecated/g7towin.test [new file with mode: 0644]
testo.d/deprecated/gopal.test [new file with mode: 0644]
testo.d/deprecated/gpsutil.test [new file with mode: 0644]
testo.d/deprecated/jtr.test [new file with mode: 0644]
testo.d/deprecated/maggeo.test [new file with mode: 0644]
testo.d/deprecated/mapsend.test [new file with mode: 0644]
testo.d/deprecated/mtk_locus.test [new file with mode: 0644]
testo.d/deprecated/nmn4.test [new file with mode: 0644]
testo.d/deprecated/pcx.test [new file with mode: 0644]
testo.d/deprecated/pocketfms.test [new file with mode: 0644]
testo.d/deprecated/skyforce.test [new file with mode: 0644]
testo.d/deprecated/stmsdf.test [new file with mode: 0644]
testo.d/deprecated/stmwpp.test [new file with mode: 0644]
testo.d/deprecated/tiger.test [new file with mode: 0644]
testo.d/deprecated/vpl.test [new file with mode: 0644]
testo.d/deprecated/wfff.test [new file with mode: 0644]
testo.d/deprecated/yahoo.test [new file with mode: 0644]
testo.d/g7towin.test [deleted file]
testo.d/gbfile.test
testo.d/gopal.test [deleted file]
testo.d/gpsman.test [deleted file]
testo.d/gpsutil.test [deleted file]
testo.d/gpx.test
testo.d/jogmap.test [deleted file]
testo.d/jtr.test [deleted file]
testo.d/maggeo.test [deleted file]
testo.d/mapsend.test [deleted file]
testo.d/mtk_locus.test [deleted file]
testo.d/nmn4.test [deleted file]
testo.d/pcx.test [deleted file]
testo.d/pocketfms.test [deleted file]
testo.d/skyforce.test [deleted file]
testo.d/stmsdf.test [deleted file]
testo.d/stmwpp.test [deleted file]
testo.d/tiger.test [deleted file]
testo.d/tomtom.test
testo.d/vidaone.test [deleted file]
testo.d/vitosmt.test [deleted file]
testo.d/vitovtt.test [deleted file]
testo.d/vpl.test [deleted file]
testo.d/wfff.test [deleted file]
testo.d/yahoo.test [deleted file]
tiger.cc [deleted file]
tools/nuke_format
vecs.h
vidaone.cc [deleted file]
vitosmt.cc [deleted file]
vitovtt.cc [deleted file]
vpl.cc [deleted file]
wfff_xml.cc [deleted file]
xmldoc/chapters/garmin_icons.xml
xmldoc/chapters/preface.xml
xmldoc/formats/compegps.xml [deleted file]
xmldoc/formats/g7towin.xml [deleted file]
xmldoc/formats/gopal.xml [deleted file]
xmldoc/formats/gpsman.xml [deleted file]
xmldoc/formats/gpsutil.xml [deleted file]
xmldoc/formats/jogmap.xml [deleted file]
xmldoc/formats/jtr.xml [deleted file]
xmldoc/formats/maggeo.xml [deleted file]
xmldoc/formats/mapsend.xml [deleted file]
xmldoc/formats/nmn4.xml [deleted file]
xmldoc/formats/options/compegps-deficon.xml [deleted file]
xmldoc/formats/options/compegps-index.xml [deleted file]
xmldoc/formats/options/compegps-radius.xml [deleted file]
xmldoc/formats/options/compegps-snlen.xml [deleted file]
xmldoc/formats/options/garmin_gpi-alerts.xml
xmldoc/formats/options/gopal-clean.xml [deleted file]
xmldoc/formats/options/gopal-date.xml [deleted file]
xmldoc/formats/options/gopal-maxspeed.xml [deleted file]
xmldoc/formats/options/gopal-minspeed.xml [deleted file]
xmldoc/formats/options/mapsend-trkver.xml [deleted file]
xmldoc/formats/options/nmn4-index.xml [deleted file]
xmldoc/formats/options/pcx-cartoexploreur.xml [deleted file]
xmldoc/formats/options/pcx-deficon.xml [deleted file]
xmldoc/formats/options/stmsdf-index.xml [deleted file]
xmldoc/formats/options/stmwpp-index.xml [deleted file]
xmldoc/formats/options/tiger-genurl.xml [deleted file]
xmldoc/formats/options/tiger-iconismarker.xml [deleted file]
xmldoc/formats/options/tiger-margin.xml [deleted file]
xmldoc/formats/options/tiger-newmarker.xml [deleted file]
xmldoc/formats/options/tiger-nolabels.xml [deleted file]
xmldoc/formats/options/tiger-oldmarker.xml [deleted file]
xmldoc/formats/options/tiger-oldthresh.xml [deleted file]
xmldoc/formats/options/tiger-snlen.xml [deleted file]
xmldoc/formats/options/tiger-suppresswhite.xml [deleted file]
xmldoc/formats/options/tiger-unfoundmarker.xml [deleted file]
xmldoc/formats/options/tiger-xpixels.xml [deleted file]
xmldoc/formats/options/tiger-ypixels.xml [deleted file]
xmldoc/formats/options/wfff-ahcicon.xml [deleted file]
xmldoc/formats/options/wfff-ahoicon.xml [deleted file]
xmldoc/formats/options/wfff-aicicon.xml [deleted file]
xmldoc/formats/options/wfff-aioicon.xml [deleted file]
xmldoc/formats/options/wfff-snmac.xml [deleted file]
xmldoc/formats/options/yahoo-addrsep.xml [deleted file]
xmldoc/formats/pcx.xml [deleted file]
xmldoc/formats/pocketfms_bc.xml [deleted file]
xmldoc/formats/pocketfms_fp.xml [deleted file]
xmldoc/formats/pocketfms_wp.xml [deleted file]
xmldoc/formats/skyforce.xml [deleted file]
xmldoc/formats/stmsdf.xml [deleted file]
xmldoc/formats/stmwpp.xml [deleted file]
xmldoc/formats/tiger.xml [deleted file]
xmldoc/formats/vidaone.xml [deleted file]
xmldoc/formats/vitosmt.xml [deleted file]
xmldoc/formats/vitovtt.xml [deleted file]
xmldoc/formats/vpl.xml [deleted file]
xmldoc/formats/wfff.xml [deleted file]
xmldoc/formats/yahoo.xml [deleted file]
yahoo.cc [deleted file]
yahoo.h [deleted file]

index 44fd9dda337d43a9c3510373693f746f47822ac9..ca888606997fe4245410069ee7dd91ecb5e727a4 100644 (file)
@@ -28,39 +28,34 @@ if(${QT_VERSION_MAJOR} EQUAL "6")
 endif()
 
 set(MINIMAL_FMTS
-  magproto.cc explorist_ini.cc gpx.cc geo.cc mapsend.cc garmin.cc
+  magproto.cc explorist_ini.cc gpx.cc geo.cc garmin.cc
   garmin_device_xml.cc garmin_tables.cc internal_styles.cc nmea.cc
   kml.cc wbt-200.cc
 )
 
 set(ALL_FMTS
-  ${MINIMAL_FMTS} gtm.cc gpsutil.cc pcx.cc
+  ${MINIMAL_FMTS} gtm.cc
   skytraq.cc holux.cc tpg.cc tpo.cc
-  xcsv.cc tiger.cc easygps.cc
+  xcsv.cc easygps.cc
   saroute.cc navicache.cc delgpl.cc
   ozi.cc text.cc html.cc
   igc.cc brauniger_iq.cc shape.cc hiketech.cc glogbook.cc
   vcf.cc lowranceusr.cc tomtom.cc
-  tef_xml.cc maggeo.cc vitosmt.cc gdb.cc bcr.cc
-  ignrando.cc stmwpp.cc nmn4.cc compegps.cc
-  yahoo.cc unicsv.cc wfff_xml.cc garmin_txt.cc gpssim.cc
-  stmsdf.cc gtrnctr.cc dmtlog.cc raymarine.cc vitovtt.cc
-  ggv_log.cc g7towin.cc garmin_gpi.cc lmx.cc random.cc xol.cc dg-100.cc
-  navilink.cc mtk_logger.cc ik3d.cc osm.cc destinator.cc exif.cc vidaone.cc
-  igo8.cc gopal.cc humminbird.cc mapasia.cc gnav_trl.cc navitel.cc ggv_ovl.cc
-  jtr.cc sbp.cc sbn.cc mmo.cc skyforce.cc itracku.cc v900.cc
-  pocketfms_bc.cc pocketfms_fp.cc pocketfms_wp.cc enigma.cc
-  vpl.cc teletype.cc jogmap.cc wintec_tes.cc
+  tef_xml.cc gdb.cc bcr.cc
+  ignrando.cc
+  unicsv.cc garmin_txt.cc gpssim.cc
+  gtrnctr.cc dmtlog.cc raymarine.cc 
+  ggv_log.cc garmin_gpi.cc lmx.cc random.cc xol.cc dg-100.cc
+  navilink.cc mtk_logger.cc ik3d.cc osm.cc destinator.cc exif.cc
+  igo8.cc humminbird.cc mapasia.cc gnav_trl.cc navitel.cc ggv_ovl.cc
+  sbp.cc sbn.cc mmo.cc itracku.cc v900.cc
+  enigma.cc
+  teletype.cc wintec_tes.cc
   subrip.cc garmin_xt.cc garmin_fit.cc
   mtk_locus.cc googledir.cc mapbar_track.cc mapfactor.cc f90g_track.cc
   energympro.cc mynav.cc ggv_bin.cc globalsat_sport.cc geojson.cc qstarz_bl_1000.cc
 )
 
-#DEPRECATED_FMTS=cetus.cc copilot.cc gpspilot.cc magnav.cc psp.cc gcdb.cc quovadis.cc gpilots.cc geoniche.cc palmdoc.cc hsa_ndv.cc coastexp.cc pathaway.cc coto.cc msroute.cc mag_pdb.cc axim_gpb.cc delbin.cc google.cc psitrex.cc
-
-#DEPRECATED_HEADERS=geo.h quovadis.h
-#DEPRECATED_SHAPE=pdbfile.cc
-
 # ALL_FMTS=$$MINIMAL_FMTS
 set(FILTERS
   position.cc radius.cc duplicate.cc arcdist.cc polygon.cc smplrout.cc
@@ -157,7 +152,6 @@ set(HEADERS
   legacyformat.h
   lowranceusr.h
   magellan.h
-  mapsend.h
   mynav.h
   navilink.h
   nmea.h
@@ -173,7 +167,7 @@ set(HEADERS
   vecs.h
   xcsv.h
   xmlgeneric.h
-  yahoo.h
+  
   zlib/crc32.h
   zlib/deflate.h
   zlib/gzguts.h
index 9c3b5c89b5d13ad713c91d22ce4da9428a6c7072..0428a879dd841fb672cc7657e25078bf034a74e0 100644 (file)
@@ -55,36 +55,31 @@ GB.setupfile.input = gui/setup.iss.qmake.in
 GB.setupfile.output = gui/setup.iss
 QMAKE_SUBSTITUTES += GB.setupfile
 
-MINIMAL_FMTS =  magproto.cc explorist_ini.cc gpx.cc geo.cc mapsend.cc garmin.cc \
+MINIMAL_FMTS =  magproto.cc explorist_ini.cc gpx.cc geo.cc garmin.cc \
                garmin_device_xml.cc garmin_tables.cc nmea.cc \
                kml.cc wbt-200.cc
 
-ALL_FMTS=$$MINIMAL_FMTS gtm.cc gpsutil.cc pcx.cc \
+ALL_FMTS=$$MINIMAL_FMTS gtm.cc \
         skytraq.cc holux.cc tpg.cc tpo.cc \
-        xcsv.cc tiger.cc easygps.cc \
+        xcsv.cc easygps.cc \
         saroute.cc navicache.cc delgpl.cc \
         ozi.cc text.cc html.cc \
         igc.cc brauniger_iq.cc shape.cc hiketech.cc glogbook.cc \
         vcf.cc lowranceusr.cc tomtom.cc \
-        tef_xml.cc maggeo.cc vitosmt.cc gdb.cc bcr.cc \
-        ignrando.cc stmwpp.cc nmn4.cc compegps.cc \
-        yahoo.cc unicsv.cc wfff_xml.cc garmin_txt.cc gpssim.cc \
-        stmsdf.cc gtrnctr.cc dmtlog.cc raymarine.cc vitovtt.cc \
-        ggv_log.cc g7towin.cc garmin_gpi.cc lmx.cc random.cc xol.cc dg-100.cc \
-        navilink.cc mtk_logger.cc ik3d.cc osm.cc destinator.cc exif.cc vidaone.cc \
-        igo8.cc gopal.cc humminbird.cc mapasia.cc gnav_trl.cc navitel.cc ggv_ovl.cc \
-        jtr.cc sbp.cc sbn.cc mmo.cc skyforce.cc itracku.cc v900.cc \
-        pocketfms_bc.cc pocketfms_fp.cc pocketfms_wp.cc enigma.cc \
-        vpl.cc teletype.cc jogmap.cc wintec_tes.cc \
+        tef_xml.cc gdb.cc bcr.cc \
+        ignrando.cc \
+        unicsv.cc garmin_txt.cc gpssim.cc \
+        gtrnctr.cc dmtlog.cc raymarine.cc \
+        ggv_log.cc garmin_gpi.cc lmx.cc random.cc xol.cc dg-100.cc \
+        navilink.cc mtk_logger.cc ik3d.cc osm.cc destinator.cc exif.cc \
+        igo8.cc humminbird.cc mapasia.cc gnav_trl.cc navitel.cc ggv_ovl.cc \
+        sbp.cc sbn.cc mmo.cc itracku.cc v900.cc \
+        enigma.cc \
+        teletype.cc wintec_tes.cc \
         subrip.cc garmin_xt.cc garmin_fit.cc \
         mtk_locus.cc googledir.cc mapbar_track.cc mapfactor.cc f90g_track.cc \
         energympro.cc mynav.cc ggv_bin.cc globalsat_sport.cc geojson.cc qstarz_bl_1000.cc
 
-DEPRECATED_FMTS=cetus.cc copilot.cc gpspilot.cc magnav.cc psp.cc gcdb.cc quovadis.cc gpilots.cc geoniche.cc palmdoc.cc hsa_ndv.cc coastexp.cc pathaway.cc coto.cc msroute.cc mag_pdb.cc axim_gpb.cc delbin.cc google.cc psitrex.cc
-
-DEPRECATED_HEADERS=geo.h quovadis.h
-DEPRECATED_SHAPE=pdbfile.cc
-
 # ALL_FMTS=$$MINIMAL_FMTS
 FILTERS=position.cc radius.cc duplicate.cc arcdist.cc polygon.cc smplrout.cc \
         reverse_route.cc sort.cc stackfilter.cc trackfilter.cc discard.cc \
@@ -166,7 +161,6 @@ HEADERS =  \
        legacyformat.h \
        lowranceusr.h \
        magellan.h \
-       mapsend.h \
        mynav.h \
        navilink.h \
        nmea.h \
@@ -181,7 +175,6 @@ HEADERS =  \
        vecs.h \
        xcsv.h \
        xmlgeneric.h \
-       yahoo.h \
        src/core/datetime.h \
        src/core/file.h \
        src/core/logging.h \
diff --git a/compegps.cc b/compegps.cc
deleted file mode 100644 (file)
index 0f54525..0000000
+++ /dev/null
@@ -1,676 +0,0 @@
-/*
-
-    Support for CompeGPS waypoint (.wpt), route (.rte) and track (.trk) files,
-
-    Copyright (C) 2005 Olaf Klein, o.b.klein@gpsbabel.org
-
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with this program; if not, write to the Free Software
-    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
-*/
-
-/*
-    History:
-               10/23/2005: First release; only a reader
-               10/25/2005: becomes a writer too
-               10/26/2005: received documentation from CompeGPS team
-                           added fatals for "G" and "U" if not WGS84 and lat/lon
-               08/13/2006: switch to gbfile api
-*/
-
-/*
-
-    the meaning of leading characters in CompeGPS data lines (enhanced PCX):
-
-    header lines:
-
-       "G": WGS 84                     - Datum of the map
-       "N": Anybody                    - Name of the user
-       "L": -02:00:00                  - Difference to UTC
-       "M": ...                        - Any comments
-       "R": 16711680 , xxxx , 1        - Route header
-       "U": 1                          - System of coordinates (0=UTM 1=Latitude/Longitude)
-
-       "C":  0 0 255 2 -1.000000       - ???
-       "V":  0.0 0.0 0 0 0 0 0.0       - ???
-       "E": 0|1|00-NUL-00 00:00:00|00:00:00|0 - ???
-
-    data lines:
-
-       "W": if(route) routepoint; else waypoint
-       "T": trackpoint
-       "t": if(track) additionally track info
-            if(!track) additionally trackpoint info
-       "a": link to ...
-       "w": waypoint additional info
-
-*/
-
-#include "defs.h"
-#include "cet_util.h"
-#include "csv_util.h"
-
-#if CSVFMTS_ENABLED
-#include <cmath>
-#include "jeeps/gpsmath.h"
-#include <cstdlib>
-#include <cstdio>
-
-#define MYNAME "CompeGPS"
-
-#define SHORT_NAME_LENGTH 16
-
-static gbfile* fin, *fout;
-static int target_index, curr_index;
-static int track_info_flag;
-static short_handle sh;
-static int snlen;
-static int radius;
-static int input_datum;
-
-static const route_head* curr_track;
-
-/* placeholders for options */
-
-static char* option_icon;
-static char* option_index;
-static char* option_radius;
-static char* option_snlen;
-
-static
-QVector<arglist_t> compegps_args = {
-  {
-    "deficon", &option_icon, "Default icon name",
-    nullptr, ARGTYPE_STRING, ARG_NOMINMAX, nullptr
-  },
-  {
-    "index", &option_index, "Index of route/track to write (if more than one in source)",
-    nullptr, ARGTYPE_INT, "1", nullptr, nullptr
-  },
-  {
-    "radius", &option_radius, "Give points (waypoints/route points) a default radius (proximity)",
-    nullptr, ARGTYPE_FLOAT, "0", nullptr, nullptr
-  },
-  {
-    "snlen", &option_snlen, "Length of generated shortnames (default 16)",
-    "16", ARGTYPE_INT, "1", nullptr, nullptr
-  },
-};
-
-static
-void fix_datum(double* lat, double* lon)
-{
-  double amt;
-
-  /*
-   * Avoid FP jitter in the common case.
-   */
-  if (input_datum != DATUM_WGS84) {
-    GPS_Math_Known_Datum_To_WGS84_M(*lat, *lon, 0.0, lat, lon,
-                                    &amt, input_datum);
-  }
-}
-
-static void
-compegps_parse_date(const char* c, QDate& date)
-{
-  date = QDate::fromString(c, "dd-MMM-yy");
-  // If that worked, fix 1900 bias to 2000 bias. Some have full 4 digits.
-  if (date.isValid()) {
-    date = date.addYears(100);
-  } else {
-    date = QDate::fromString(c, "dd-MMM-yyyy");
-  }
-}
-
-static void
-compegps_parse_time(const char* c, QTime& time)
-{
-  time = QTime::fromString(c, "hh:mm:ss");
-}
-
-/* specialized readers */
-
-static Waypoint*
-parse_wpt(char* buff)
-{
-  int col = -1;
-  char* cx;
-  auto* wpt = new Waypoint;
-  int has_time = 0;
-  QDate date;
-  QTime time;
-
-  char* c = strstr(buff, "A ");
-  if (c == buff) {
-    col++;
-  }
-
-  c = csv_lineparse(buff, " ", "", col++);
-  while (c != nullptr) {
-    c = lrtrim(c);
-    if (*c != '\0') {
-#if 0
-      printf(MYNAME "_read_wpt: col(%d)=%s\n", col, c);
-#endif
-      switch (col) {
-      case 0:
-
-        cx = c + strlen(c) - 1;                /* trim trailing underscores */
-        while ((cx >= c) && (*cx == '_')) {
-          *cx-- = '\0';
-        }
-        if (*c != '\0') {
-          wpt->shortname = c;
-        }
-        break;
-      case 2:
-        human_to_dec(c, &wpt->latitude, nullptr, 1);
-        break;
-      case 3:
-        human_to_dec(c, nullptr, &wpt->longitude, 2);
-        break;
-        // Older compegps used a dumb constant.
-        // Report are that 2010-era writes a sensible
-        // value here.
-        /* always "27-MAR-62 00:00:00" */
-      case 4:
-        if (strcmp(c, "27-MAR-62")) {
-          has_time = 1;
-          compegps_parse_date(c, date);
-        }
-        break;
-      case 5:
-        if (has_time) {
-          compegps_parse_time(c, time);
-          wpt->SetCreationTime(QDateTime(date, time, Qt::UTC));
-        }
-        break;
-      case 6:
-        wpt->altitude = atof(c);
-        break;
-      case 7:
-        wpt->description = c;
-        break;
-      default:
-        if (col > 7) {
-          wpt->description += " ";
-          wpt->description += c;
-        }
-      }
-    }
-    c = csv_lineparse(nullptr, " ", "", col++);
-  }
-  fix_datum(&wpt->latitude, &wpt->longitude);
-  return wpt;
-}
-
-static void
-parse_wpt_info(const char* buff, Waypoint* wpt)                /* "w" */
-{
-  int col = -1;
-  double fx;
-
-  char* c = csv_lineparse(buff, ",", "", col++);
-  while (c != nullptr) {
-    c = lrtrim(c);
-    if (*c != '\0') {
-#if 0
-      printf(MYNAME "_read_wpt_info: col(%d)=%s\n", col, c);
-#endif
-      switch (col) {
-      case 0:
-        wpt->icon_descr = c;
-        break;
-      case 1:
-        break;                 /* Text postion */
-      case 2:
-        break;                 /* Lens zoom level */
-      case 3:
-        break;                 /* Text colour */
-      case 4:
-        break;                 /* Background colour */
-      case 5:
-        break;                 /* Transparent text  (0=transparent, 1=no transparent) */
-      case 6:
-        break;                 /* ??? */
-      case 7:
-        break;                 /* ??? */
-      case 8:                  /* radius */
-        fx = atof(c);
-        if (fx > 0) {
-          WAYPT_SET(wpt, proximity, fx);
-        }
-        break;
-      }
-    }
-    c = csv_lineparse(nullptr, ",", "", col++);
-  }
-}
-
-static Waypoint*
-parse_trkpt(char* buff)
-{
-  int col = -1;
-  auto* wpt = new Waypoint;
-  QDate date;
-  QTime time;
-
-  char* c = strstr(buff, "A ");
-  if (c == buff) {
-    col++;
-  }
-
-  c = csv_lineparse(buff, " ", "", col++);
-  while (c != nullptr) {
-    c = lrtrim(c);
-    if (*c != '\0') {
-#if 0
-      printf(MYNAME "_read_trkpt: col(%d)=%s\n", col, c);
-#endif
-      switch (col) {
-      case 2:
-        human_to_dec(c, &wpt->latitude, nullptr, 1);
-        break;
-      case 3:
-        human_to_dec(c, nullptr, &wpt->longitude, 2);
-        break;
-      case 4:
-        compegps_parse_date(c, date);
-        break;
-      case 5:
-        compegps_parse_time(c, time);
-        wpt->SetCreationTime(QDateTime(date, time, Qt::UTC));
-        break;
-      case 7:
-        wpt->altitude = atof(c);
-        break;
-      }
-    }
-    c = csv_lineparse(nullptr, " ", "", col++);
-  }
-  fix_datum(&wpt->latitude, &wpt->longitude);
-  return wpt;
-}
-
-static void
-parse_track_info(const char* buff, route_head* track)  /* "t" */
-{
-  int col = -1;
-
-  char* c = csv_lineparse(buff, "|", "", col++);
-  while (c != nullptr) {
-    c = lrtrim(c);
-    if (*c != '\0') {
-#if 0
-      printf(MYNAME "_read_track_info: col(%d)=%s\n", col, c);
-#endif
-      switch (col) {
-      case 0:
-        break; /* unknown field */
-      case 1:
-        track->rte_name = c;
-        break;
-      case 2:
-        break; /* unknown field */
-      case 3:
-        break; /* unknown field */
-      }
-    }
-    c = csv_lineparse(nullptr, "|", "", col++);
-  }
-}
-
-static void
-parse_rte_info(const char* buff, route_head* route)    /* "R" */
-{
-  int col = -1;
-
-  char* c = csv_lineparse(buff, ",", "", col++);
-  while (c != nullptr) {
-    c = lrtrim(c);
-    if (*c != '\0') {
-#if 0
-      printf(MYNAME "_read_rte_info: col(%d)=%s\n", col, c);
-#endif
-      switch (col) {
-      case 0:
-        break;                         /* unknown field (colour?) */
-      case 1:
-        route->rte_name = c;
-        break;
-      case 2:
-        break;                         /* unknown field */
-
-      }
-    }
-    c = csv_lineparse(nullptr, ",", "", col++);
-  }
-}
-
-/* main functions */
-
-static void
-compegps_rd_init(const QString& fname)
-{
-  fin = gbfopen(fname, "rb", MYNAME);
-  input_datum = DATUM_WGS84;
-}
-
-static void
-compegps_rd_deinit()
-{
-  gbfclose(fin);
-}
-
-static void
-compegps_data_read()
-{
-  char* buff;
-  int line = 0;
-  Waypoint* wpt = nullptr;
-  route_head* route = nullptr;
-  route_head* track = nullptr;
-
-  while ((buff = gbfgetstr(fin))) {
-    if ((line++ == 0) && fin->unicode) {
-      cet_convert_init(CET_CHARSET_UTF8, 1);
-    }
-    char* cin = lrtrim(buff);
-    if (strlen(cin) == 0) {
-      continue;
-    }
-
-    char* ctail = strchr(cin, ' ');
-    if (ctail == nullptr) {
-      continue;
-    }
-    ctail = lrtrim(ctail);
-
-    switch (*cin) {
-    case 'G':
-      input_datum = GPS_Lookup_Datum_Index(ctail);
-      if (input_datum < 0) {
-        fatal(MYNAME ": Unsupported datum \"%s\"!", ctail);
-      }
-      break;
-    case 'U':
-      switch (*ctail) {
-      case '1': /* lat/lon, that's we want to see */
-        break;
-      case '0': /* UTM not supported yet */
-        fatal(MYNAME "Sorry, UTM is not supported yet!\n");
-      default:
-        fatal(MYNAME "Invalid system of coordinates (%s)!\n", cin);
-      }
-      break;
-    case 'R':
-      route = new route_head;
-      route_add_head(route);
-      parse_rte_info(ctail, route);
-      break;
-    case 'M':
-      break;
-    case 'W':
-      wpt = parse_wpt(ctail);
-      if (wpt != nullptr) {
-        if (route != nullptr) {
-          route_add_wpt(route, wpt);
-        } else {
-          waypt_add(wpt);
-        }
-      }
-      break;
-    case 'w':
-      is_fatal((wpt == nullptr), MYNAME ": No waypoint data before \"%s\"!", cin);
-      parse_wpt_info(ctail, wpt);
-      break;
-    case 'T':
-      wpt = parse_trkpt(ctail);
-      if (wpt != nullptr) {
-        if (track == nullptr) {
-          track = new route_head;
-          track_add_head(track);
-        }
-        track_add_wpt(track, wpt);
-      }
-      break;
-    case 't':
-      if (track != nullptr) {
-        parse_track_info(ctail, track);
-      }
-      break;
-    }
-  }
-}
-
-/* ----------------------------------------------------------- */
-
-static void
-write_waypt_cb(const Waypoint* wpt)
-{
-  if (curr_index != target_index) {
-    return;
-  }
-
-  // Our only output cleansing is to replace
-  QString cleaned_name(wpt->shortname);
-  cleaned_name.replace(' ', '_');
-
-  QString name = (snlen > 0) ? mkshort(sh, cleaned_name) : cleaned_name;
-
-  gbfprintf(fout, "W  %s A ", CSTR(name));
-  gbfprintf(fout, "%.10f%c%c ",
-            fabs(wpt->latitude), 0xBA, (wpt->latitude >= 0) ? 'N' : 'S');
-  gbfprintf(fout, "%.10f%c%c ",
-            fabs(wpt->longitude), 0xBA, (wpt->longitude >= 0) ? 'E' : 'W');
-  gbfprintf(fout, "27-MAR-62 00:00:00 %.6f",
-            (wpt->altitude != unknown_alt) ? wpt->altitude : 0.0);
-  if (wpt->description != nullptr) {
-    gbfprintf(fout, " %s", CSTRc(wpt->description));
-  }
-  gbfprintf(fout, "\n");
-
-  if ((!wpt->icon_descr.isNull()) || (wpt->wpt_flags.proximity) || \
-      (option_icon != nullptr)) {
-    gbfprintf(fout, "w  %s,0,0.0,16777215,255,1,7,,%.1f\n",
-              wpt->icon_descr.isNull() ? "Waypoint" : CSTR(wpt->icon_descr),
-              WAYPT_GET(wpt, proximity, 0));
-  }
-}
-
-static void
-write_route_hdr_cb(const route_head* rte)
-{
-  curr_index++;
-  if (curr_index != target_index) {
-    return;
-  }
-
-  QString name = rte->rte_name;
-  if (name != nullptr) {
-    name = csv_stringclean(name, ",");
-  } else {
-    name = " ";
-  }
-  gbfprintf(fout, "R  16711680,%s,1,-1\n", CSTR(name));
-}
-
-static void
-write_route()
-{
-  curr_index = 0;
-  route_disp_all(write_route_hdr_cb, nullptr, write_waypt_cb);
-}
-
-static void
-write_track_hdr_cb(const route_head* trk)
-{
-  track_info_flag = 0;
-  curr_track = trk;
-
-  curr_index++;
-  if (curr_index != target_index) {
-    return;
-  }
-
-  track_info_flag = 1;
-}
-
-static void
-write_trkpt_cb(const Waypoint* wpt)
-{
-  if ((curr_index != target_index) || (wpt == nullptr)) {
-    return;
-  }
-
-  QDateTime default_dt(QDate(1970,1,1), QTime(0,0,0), Qt::UTC);
-  auto dt = wpt->creation_time.isValid() ? wpt->GetCreationTime() : default_dt;
-  QString buff = dt.toString("dd-MMM-yy hh:mm:ss").toUpper();
-
-  gbfprintf(fout, "T  A %.10f%c%c %.10f%c%c ",
-            fabs(wpt->latitude), 0xBA, (wpt->latitude >= 0) ? 'N' : 'S',
-            fabs(wpt->longitude), 0xBA, (wpt->longitude >= 0) ? 'E' : 'W');
-  gbfprintf(fout, "%s s %.1f %.1f %.1f %.1f %d ",
-            CSTR(buff),
-            wpt->altitude,
-            0.0,
-            0.0,
-            0.0,
-            0);
-  gbfprintf(fout, "%.1f %.1f %.1f %.1f %.1f\n",
-            -1000.0,
-            -1.0,
-            -1.0,
-            -1.0,
-            -1.0);
-  if (track_info_flag != 0) {
-    track_info_flag = 0;
-    if (curr_track->rte_name != nullptr) {
-      QString name = csv_stringclean(curr_track->rte_name, "|");
-      gbfprintf(fout, "t 4294967295|%s|-1|-1\n", CSTR(name));
-    }
-  }
-}
-
-static void
-write_track()
-{
-  curr_index = 0;
-
-//     gbfprintf(fout, "L  +02:00:00\n");
-  track_disp_all(write_track_hdr_cb, nullptr, write_trkpt_cb);
-  gbfprintf(fout, "F  1234\n");
-}
-
-static void
-write_waypoints()
-{
-  waypt_disp_all(write_waypt_cb);
-}
-
-/* --------------------------------------------------------------------------- */
-
-static void
-compegps_wr_init(const QString& fname)
-{
-  fout = gbfopen(fname, "w", MYNAME);
-  sh = mkshort_new_handle();
-}
-
-static void
-compegps_wr_deinit()
-{
-  mkshort_del_handle(&sh);
-  gbfclose(fout);
-}
-
-static void
-compegps_data_write()
-{
-  /* because of different file extensions we can only write one GPS data type at time */
-
-  gbfprintf(fout, "G  WGS 84\n");
-  gbfprintf(fout, "U  1\n");
-
-  /* process options */
-
-  target_index = 1;
-  if (option_index != nullptr) {
-    target_index = atoi(option_index);
-  }
-
-  snlen = 0;
-  if (global_opts.synthesize_shortnames != 0) {
-    if (option_snlen != nullptr) {
-      snlen = atoi(option_snlen);
-    } else {
-      snlen = SHORT_NAME_LENGTH;
-    }
-
-    is_fatal((snlen < 1), MYNAME "Invalid length for generated shortnames!");
-
-    setshort_whitespace_ok(sh, 0);
-    setshort_length(sh, snlen);
-  }
-
-  radius = -1;
-  if (option_radius != nullptr) {
-    radius = atof(option_radius);
-    is_fatal((radius <= 0.0), MYNAME "Invalid value for radius!");
-  }
-
-  if (option_icon != nullptr) {
-    if (*option_icon == '\0') {
-      option_icon = nullptr;
-    } else if (case_ignore_strcmp(option_icon, "deficon") == 0) {
-      option_icon = nullptr;
-    }
-  }
-
-  switch (global_opts.objective) {
-  case wptdata:
-  case unknown_gpsdata:
-    curr_index = target_index = 0;
-    write_waypoints();
-    break;
-  case trkdata:
-    write_track();
-    break;
-  case rtedata:
-    write_route();
-    break;
-  case posndata:
-    fatal(MYNAME ": Realtime positioning not supported.\n");
-    break;
-  }
-}
-
-/* --------------------------------------------------------------------------- */
-
-ff_vecs_t compegps_vecs = {
-  ff_type_file,
-  FF_CAP_RW_ALL,
-  compegps_rd_init,
-  compegps_wr_init,
-  compegps_rd_deinit,
-  compegps_wr_deinit,
-  compegps_data_read,
-  compegps_data_write,
-  nullptr,
-  &compegps_args,
-  CET_CHARSET_MS_ANSI, 1
-  , NULL_POS_OPS,
-  nullptr
-};
-#endif /* CSVFMTS_ENABLED */
diff --git a/deprecated/compegps.cc b/deprecated/compegps.cc
new file mode 100644 (file)
index 0000000..0f54525
--- /dev/null
@@ -0,0 +1,676 @@
+/*
+
+    Support for CompeGPS waypoint (.wpt), route (.rte) and track (.trk) files,
+
+    Copyright (C) 2005 Olaf Klein, o.b.klein@gpsbabel.org
+
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+*/
+
+/*
+    History:
+               10/23/2005: First release; only a reader
+               10/25/2005: becomes a writer too
+               10/26/2005: received documentation from CompeGPS team
+                           added fatals for "G" and "U" if not WGS84 and lat/lon
+               08/13/2006: switch to gbfile api
+*/
+
+/*
+
+    the meaning of leading characters in CompeGPS data lines (enhanced PCX):
+
+    header lines:
+
+       "G": WGS 84                     - Datum of the map
+       "N": Anybody                    - Name of the user
+       "L": -02:00:00                  - Difference to UTC
+       "M": ...                        - Any comments
+       "R": 16711680 , xxxx , 1        - Route header
+       "U": 1                          - System of coordinates (0=UTM 1=Latitude/Longitude)
+
+       "C":  0 0 255 2 -1.000000       - ???
+       "V":  0.0 0.0 0 0 0 0 0.0       - ???
+       "E": 0|1|00-NUL-00 00:00:00|00:00:00|0 - ???
+
+    data lines:
+
+       "W": if(route) routepoint; else waypoint
+       "T": trackpoint
+       "t": if(track) additionally track info
+            if(!track) additionally trackpoint info
+       "a": link to ...
+       "w": waypoint additional info
+
+*/
+
+#include "defs.h"
+#include "cet_util.h"
+#include "csv_util.h"
+
+#if CSVFMTS_ENABLED
+#include <cmath>
+#include "jeeps/gpsmath.h"
+#include <cstdlib>
+#include <cstdio>
+
+#define MYNAME "CompeGPS"
+
+#define SHORT_NAME_LENGTH 16
+
+static gbfile* fin, *fout;
+static int target_index, curr_index;
+static int track_info_flag;
+static short_handle sh;
+static int snlen;
+static int radius;
+static int input_datum;
+
+static const route_head* curr_track;
+
+/* placeholders for options */
+
+static char* option_icon;
+static char* option_index;
+static char* option_radius;
+static char* option_snlen;
+
+static
+QVector<arglist_t> compegps_args = {
+  {
+    "deficon", &option_icon, "Default icon name",
+    nullptr, ARGTYPE_STRING, ARG_NOMINMAX, nullptr
+  },
+  {
+    "index", &option_index, "Index of route/track to write (if more than one in source)",
+    nullptr, ARGTYPE_INT, "1", nullptr, nullptr
+  },
+  {
+    "radius", &option_radius, "Give points (waypoints/route points) a default radius (proximity)",
+    nullptr, ARGTYPE_FLOAT, "0", nullptr, nullptr
+  },
+  {
+    "snlen", &option_snlen, "Length of generated shortnames (default 16)",
+    "16", ARGTYPE_INT, "1", nullptr, nullptr
+  },
+};
+
+static
+void fix_datum(double* lat, double* lon)
+{
+  double amt;
+
+  /*
+   * Avoid FP jitter in the common case.
+   */
+  if (input_datum != DATUM_WGS84) {
+    GPS_Math_Known_Datum_To_WGS84_M(*lat, *lon, 0.0, lat, lon,
+                                    &amt, input_datum);
+  }
+}
+
+static void
+compegps_parse_date(const char* c, QDate& date)
+{
+  date = QDate::fromString(c, "dd-MMM-yy");
+  // If that worked, fix 1900 bias to 2000 bias. Some have full 4 digits.
+  if (date.isValid()) {
+    date = date.addYears(100);
+  } else {
+    date = QDate::fromString(c, "dd-MMM-yyyy");
+  }
+}
+
+static void
+compegps_parse_time(const char* c, QTime& time)
+{
+  time = QTime::fromString(c, "hh:mm:ss");
+}
+
+/* specialized readers */
+
+static Waypoint*
+parse_wpt(char* buff)
+{
+  int col = -1;
+  char* cx;
+  auto* wpt = new Waypoint;
+  int has_time = 0;
+  QDate date;
+  QTime time;
+
+  char* c = strstr(buff, "A ");
+  if (c == buff) {
+    col++;
+  }
+
+  c = csv_lineparse(buff, " ", "", col++);
+  while (c != nullptr) {
+    c = lrtrim(c);
+    if (*c != '\0') {
+#if 0
+      printf(MYNAME "_read_wpt: col(%d)=%s\n", col, c);
+#endif
+      switch (col) {
+      case 0:
+
+        cx = c + strlen(c) - 1;                /* trim trailing underscores */
+        while ((cx >= c) && (*cx == '_')) {
+          *cx-- = '\0';
+        }
+        if (*c != '\0') {
+          wpt->shortname = c;
+        }
+        break;
+      case 2:
+        human_to_dec(c, &wpt->latitude, nullptr, 1);
+        break;
+      case 3:
+        human_to_dec(c, nullptr, &wpt->longitude, 2);
+        break;
+        // Older compegps used a dumb constant.
+        // Report are that 2010-era writes a sensible
+        // value here.
+        /* always "27-MAR-62 00:00:00" */
+      case 4:
+        if (strcmp(c, "27-MAR-62")) {
+          has_time = 1;
+          compegps_parse_date(c, date);
+        }
+        break;
+      case 5:
+        if (has_time) {
+          compegps_parse_time(c, time);
+          wpt->SetCreationTime(QDateTime(date, time, Qt::UTC));
+        }
+        break;
+      case 6:
+        wpt->altitude = atof(c);
+        break;
+      case 7:
+        wpt->description = c;
+        break;
+      default:
+        if (col > 7) {
+          wpt->description += " ";
+          wpt->description += c;
+        }
+      }
+    }
+    c = csv_lineparse(nullptr, " ", "", col++);
+  }
+  fix_datum(&wpt->latitude, &wpt->longitude);
+  return wpt;
+}
+
+static void
+parse_wpt_info(const char* buff, Waypoint* wpt)                /* "w" */
+{
+  int col = -1;
+  double fx;
+
+  char* c = csv_lineparse(buff, ",", "", col++);
+  while (c != nullptr) {
+    c = lrtrim(c);
+    if (*c != '\0') {
+#if 0
+      printf(MYNAME "_read_wpt_info: col(%d)=%s\n", col, c);
+#endif
+      switch (col) {
+      case 0:
+        wpt->icon_descr = c;
+        break;
+      case 1:
+        break;                 /* Text postion */
+      case 2:
+        break;                 /* Lens zoom level */
+      case 3:
+        break;                 /* Text colour */
+      case 4:
+        break;                 /* Background colour */
+      case 5:
+        break;                 /* Transparent text  (0=transparent, 1=no transparent) */
+      case 6:
+        break;                 /* ??? */
+      case 7:
+        break;                 /* ??? */
+      case 8:                  /* radius */
+        fx = atof(c);
+        if (fx > 0) {
+          WAYPT_SET(wpt, proximity, fx);
+        }
+        break;
+      }
+    }
+    c = csv_lineparse(nullptr, ",", "", col++);
+  }
+}
+
+static Waypoint*
+parse_trkpt(char* buff)
+{
+  int col = -1;
+  auto* wpt = new Waypoint;
+  QDate date;
+  QTime time;
+
+  char* c = strstr(buff, "A ");
+  if (c == buff) {
+    col++;
+  }
+
+  c = csv_lineparse(buff, " ", "", col++);
+  while (c != nullptr) {
+    c = lrtrim(c);
+    if (*c != '\0') {
+#if 0
+      printf(MYNAME "_read_trkpt: col(%d)=%s\n", col, c);
+#endif
+      switch (col) {
+      case 2:
+        human_to_dec(c, &wpt->latitude, nullptr, 1);
+        break;
+      case 3:
+        human_to_dec(c, nullptr, &wpt->longitude, 2);
+        break;
+      case 4:
+        compegps_parse_date(c, date);
+        break;
+      case 5:
+        compegps_parse_time(c, time);
+        wpt->SetCreationTime(QDateTime(date, time, Qt::UTC));
+        break;
+      case 7:
+        wpt->altitude = atof(c);
+        break;
+      }
+    }
+    c = csv_lineparse(nullptr, " ", "", col++);
+  }
+  fix_datum(&wpt->latitude, &wpt->longitude);
+  return wpt;
+}
+
+static void
+parse_track_info(const char* buff, route_head* track)  /* "t" */
+{
+  int col = -1;
+
+  char* c = csv_lineparse(buff, "|", "", col++);
+  while (c != nullptr) {
+    c = lrtrim(c);
+    if (*c != '\0') {
+#if 0
+      printf(MYNAME "_read_track_info: col(%d)=%s\n", col, c);
+#endif
+      switch (col) {
+      case 0:
+        break; /* unknown field */
+      case 1:
+        track->rte_name = c;
+        break;
+      case 2:
+        break; /* unknown field */
+      case 3:
+        break; /* unknown field */
+      }
+    }
+    c = csv_lineparse(nullptr, "|", "", col++);
+  }
+}
+
+static void
+parse_rte_info(const char* buff, route_head* route)    /* "R" */
+{
+  int col = -1;
+
+  char* c = csv_lineparse(buff, ",", "", col++);
+  while (c != nullptr) {
+    c = lrtrim(c);
+    if (*c != '\0') {
+#if 0
+      printf(MYNAME "_read_rte_info: col(%d)=%s\n", col, c);
+#endif
+      switch (col) {
+      case 0:
+        break;                         /* unknown field (colour?) */
+      case 1:
+        route->rte_name = c;
+        break;
+      case 2:
+        break;                         /* unknown field */
+
+      }
+    }
+    c = csv_lineparse(nullptr, ",", "", col++);
+  }
+}
+
+/* main functions */
+
+static void
+compegps_rd_init(const QString& fname)
+{
+  fin = gbfopen(fname, "rb", MYNAME);
+  input_datum = DATUM_WGS84;
+}
+
+static void
+compegps_rd_deinit()
+{
+  gbfclose(fin);
+}
+
+static void
+compegps_data_read()
+{
+  char* buff;
+  int line = 0;
+  Waypoint* wpt = nullptr;
+  route_head* route = nullptr;
+  route_head* track = nullptr;
+
+  while ((buff = gbfgetstr(fin))) {
+    if ((line++ == 0) && fin->unicode) {
+      cet_convert_init(CET_CHARSET_UTF8, 1);
+    }
+    char* cin = lrtrim(buff);
+    if (strlen(cin) == 0) {
+      continue;
+    }
+
+    char* ctail = strchr(cin, ' ');
+    if (ctail == nullptr) {
+      continue;
+    }
+    ctail = lrtrim(ctail);
+
+    switch (*cin) {
+    case 'G':
+      input_datum = GPS_Lookup_Datum_Index(ctail);
+      if (input_datum < 0) {
+        fatal(MYNAME ": Unsupported datum \"%s\"!", ctail);
+      }
+      break;
+    case 'U':
+      switch (*ctail) {
+      case '1': /* lat/lon, that's we want to see */
+        break;
+      case '0': /* UTM not supported yet */
+        fatal(MYNAME "Sorry, UTM is not supported yet!\n");
+      default:
+        fatal(MYNAME "Invalid system of coordinates (%s)!\n", cin);
+      }
+      break;
+    case 'R':
+      route = new route_head;
+      route_add_head(route);
+      parse_rte_info(ctail, route);
+      break;
+    case 'M':
+      break;
+    case 'W':
+      wpt = parse_wpt(ctail);
+      if (wpt != nullptr) {
+        if (route != nullptr) {
+          route_add_wpt(route, wpt);
+        } else {
+          waypt_add(wpt);
+        }
+      }
+      break;
+    case 'w':
+      is_fatal((wpt == nullptr), MYNAME ": No waypoint data before \"%s\"!", cin);
+      parse_wpt_info(ctail, wpt);
+      break;
+    case 'T':
+      wpt = parse_trkpt(ctail);
+      if (wpt != nullptr) {
+        if (track == nullptr) {
+          track = new route_head;
+          track_add_head(track);
+        }
+        track_add_wpt(track, wpt);
+      }
+      break;
+    case 't':
+      if (track != nullptr) {
+        parse_track_info(ctail, track);
+      }
+      break;
+    }
+  }
+}
+
+/* ----------------------------------------------------------- */
+
+static void
+write_waypt_cb(const Waypoint* wpt)
+{
+  if (curr_index != target_index) {
+    return;
+  }
+
+  // Our only output cleansing is to replace
+  QString cleaned_name(wpt->shortname);
+  cleaned_name.replace(' ', '_');
+
+  QString name = (snlen > 0) ? mkshort(sh, cleaned_name) : cleaned_name;
+
+  gbfprintf(fout, "W  %s A ", CSTR(name));
+  gbfprintf(fout, "%.10f%c%c ",
+            fabs(wpt->latitude), 0xBA, (wpt->latitude >= 0) ? 'N' : 'S');
+  gbfprintf(fout, "%.10f%c%c ",
+            fabs(wpt->longitude), 0xBA, (wpt->longitude >= 0) ? 'E' : 'W');
+  gbfprintf(fout, "27-MAR-62 00:00:00 %.6f",
+            (wpt->altitude != unknown_alt) ? wpt->altitude : 0.0);
+  if (wpt->description != nullptr) {
+    gbfprintf(fout, " %s", CSTRc(wpt->description));
+  }
+  gbfprintf(fout, "\n");
+
+  if ((!wpt->icon_descr.isNull()) || (wpt->wpt_flags.proximity) || \
+      (option_icon != nullptr)) {
+    gbfprintf(fout, "w  %s,0,0.0,16777215,255,1,7,,%.1f\n",
+              wpt->icon_descr.isNull() ? "Waypoint" : CSTR(wpt->icon_descr),
+              WAYPT_GET(wpt, proximity, 0));
+  }
+}
+
+static void
+write_route_hdr_cb(const route_head* rte)
+{
+  curr_index++;
+  if (curr_index != target_index) {
+    return;
+  }
+
+  QString name = rte->rte_name;
+  if (name != nullptr) {
+    name = csv_stringclean(name, ",");
+  } else {
+    name = " ";
+  }
+  gbfprintf(fout, "R  16711680,%s,1,-1\n", CSTR(name));
+}
+
+static void
+write_route()
+{
+  curr_index = 0;
+  route_disp_all(write_route_hdr_cb, nullptr, write_waypt_cb);
+}
+
+static void
+write_track_hdr_cb(const route_head* trk)
+{
+  track_info_flag = 0;
+  curr_track = trk;
+
+  curr_index++;
+  if (curr_index != target_index) {
+    return;
+  }
+
+  track_info_flag = 1;
+}
+
+static void
+write_trkpt_cb(const Waypoint* wpt)
+{
+  if ((curr_index != target_index) || (wpt == nullptr)) {
+    return;
+  }
+
+  QDateTime default_dt(QDate(1970,1,1), QTime(0,0,0), Qt::UTC);
+  auto dt = wpt->creation_time.isValid() ? wpt->GetCreationTime() : default_dt;
+  QString buff = dt.toString("dd-MMM-yy hh:mm:ss").toUpper();
+
+  gbfprintf(fout, "T  A %.10f%c%c %.10f%c%c ",
+            fabs(wpt->latitude), 0xBA, (wpt->latitude >= 0) ? 'N' : 'S',
+            fabs(wpt->longitude), 0xBA, (wpt->longitude >= 0) ? 'E' : 'W');
+  gbfprintf(fout, "%s s %.1f %.1f %.1f %.1f %d ",
+            CSTR(buff),
+            wpt->altitude,
+            0.0,
+            0.0,
+            0.0,
+            0);
+  gbfprintf(fout, "%.1f %.1f %.1f %.1f %.1f\n",
+            -1000.0,
+            -1.0,
+            -1.0,
+            -1.0,
+            -1.0);
+  if (track_info_flag != 0) {
+    track_info_flag = 0;
+    if (curr_track->rte_name != nullptr) {
+      QString name = csv_stringclean(curr_track->rte_name, "|");
+      gbfprintf(fout, "t 4294967295|%s|-1|-1\n", CSTR(name));
+    }
+  }
+}
+
+static void
+write_track()
+{
+  curr_index = 0;
+
+//     gbfprintf(fout, "L  +02:00:00\n");
+  track_disp_all(write_track_hdr_cb, nullptr, write_trkpt_cb);
+  gbfprintf(fout, "F  1234\n");
+}
+
+static void
+write_waypoints()
+{
+  waypt_disp_all(write_waypt_cb);
+}
+
+/* --------------------------------------------------------------------------- */
+
+static void
+compegps_wr_init(const QString& fname)
+{
+  fout = gbfopen(fname, "w", MYNAME);
+  sh = mkshort_new_handle();
+}
+
+static void
+compegps_wr_deinit()
+{
+  mkshort_del_handle(&sh);
+  gbfclose(fout);
+}
+
+static void
+compegps_data_write()
+{
+  /* because of different file extensions we can only write one GPS data type at time */
+
+  gbfprintf(fout, "G  WGS 84\n");
+  gbfprintf(fout, "U  1\n");
+
+  /* process options */
+
+  target_index = 1;
+  if (option_index != nullptr) {
+    target_index = atoi(option_index);
+  }
+
+  snlen = 0;
+  if (global_opts.synthesize_shortnames != 0) {
+    if (option_snlen != nullptr) {
+      snlen = atoi(option_snlen);
+    } else {
+      snlen = SHORT_NAME_LENGTH;
+    }
+
+    is_fatal((snlen < 1), MYNAME "Invalid length for generated shortnames!");
+
+    setshort_whitespace_ok(sh, 0);
+    setshort_length(sh, snlen);
+  }
+
+  radius = -1;
+  if (option_radius != nullptr) {
+    radius = atof(option_radius);
+    is_fatal((radius <= 0.0), MYNAME "Invalid value for radius!");
+  }
+
+  if (option_icon != nullptr) {
+    if (*option_icon == '\0') {
+      option_icon = nullptr;
+    } else if (case_ignore_strcmp(option_icon, "deficon") == 0) {
+      option_icon = nullptr;
+    }
+  }
+
+  switch (global_opts.objective) {
+  case wptdata:
+  case unknown_gpsdata:
+    curr_index = target_index = 0;
+    write_waypoints();
+    break;
+  case trkdata:
+    write_track();
+    break;
+  case rtedata:
+    write_route();
+    break;
+  case posndata:
+    fatal(MYNAME ": Realtime positioning not supported.\n");
+    break;
+  }
+}
+
+/* --------------------------------------------------------------------------- */
+
+ff_vecs_t compegps_vecs = {
+  ff_type_file,
+  FF_CAP_RW_ALL,
+  compegps_rd_init,
+  compegps_wr_init,
+  compegps_rd_deinit,
+  compegps_wr_deinit,
+  compegps_data_read,
+  compegps_data_write,
+  nullptr,
+  &compegps_args,
+  CET_CHARSET_MS_ANSI, 1
+  , NULL_POS_OPS,
+  nullptr
+};
+#endif /* CSVFMTS_ENABLED */
diff --git a/deprecated/g7towin.cc b/deprecated/g7towin.cc
new file mode 100644 (file)
index 0000000..108ebad
--- /dev/null
@@ -0,0 +1,591 @@
+/*
+
+    Support for G7ToWin data files (.g7t),
+    Copyright (C) 2007 Olaf Klein, o.b.klein@gpsbabel.org
+
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+*/
+
+/*
+    History:
+               04/07/2007: start programming
+               04/15/2007: added to gpsbabel
+*/
+
+#include "defs.h"
+#include "cet_util.h"
+#include "csv_util.h"
+#include "garmin_fs.h"
+#include "garmin_tables.h"
+#include "jeeps/gpsmath.h"
+#include "strptime.h"
+
+#include <cstdio>
+#include <cstdlib>
+#include <ctime>
+
+#if CSVFMTS_ENABLED
+
+#define MYNAME "g7towin"
+
+#define G7T_HEADER     "Version 2:G7T"
+
+static gbfile* fin;
+static grid_type grid;
+static int datum;
+static gpsdata_type mode;
+static double altf;
+static int gardown;
+static int event_ct;
+
+static
+QVector<arglist_t> g7towin_args = {
+};
+
+#define WAYPT__OFS     0x00000
+#define TRKPT__OFS     0x01000
+
+#define WPT_c0_OFS     0x0c000
+#define WPT_c1_OFS     0x0c100
+#define WPT_c2_OFS     0x0c200
+#define WPT_c3_OFS     0x0c300
+#define WPT_c4_OFS     0x0c400
+#define WPT_c5_OFS     0x0c500
+#define WPT_c6_OFS     0x0c600
+#define WPT_c7_OFS     0x0c700
+#define WPT_c8_OFS     0x0c800
+#define WPT_cA_OFS     0x0cA00
+#define WPT_cB_OFS     0x0cB00
+#define WPT_cC_OFS     0x0cC00
+#define WPT_cD_OFS     0x0cD00
+
+static void
+parse_line(char* buff, int index, const char* delimiter, Waypoint* wpt)
+{
+  char* cin;
+  garmin_fs_t* gmsd = garmin_fs_t::find(wpt);
+
+  while ((cin = csv_lineparse(buff, delimiter, "", index++))) {
+
+    buff = nullptr;
+    cin = lrtrim(cin);
+
+    if ((*cin == '\0') ||
+        (strcmp(cin, "INF") == 0) ||
+        (strcmp(cin, "1e25") == 0) ||
+        (strcmp(cin, "1.0e25") == 0)) {
+      continue;
+    }
+
+    switch (index) {
+
+      int categories;
+      struct tm tm;
+      char* cerr;
+
+    case TRKPT__OFS + 1:
+      cin += parse_coordinates(cin, datum, grid,
+                               &wpt->latitude, &wpt->longitude, MYNAME);
+      while (isspace(*cin)) {
+        cin++;
+      }
+
+      memset(&tm, 0, sizeof(tm));
+      cerr = strptime(cin, "%a %b %d %H:%M:%S %Y", &tm);
+      if (cerr == nullptr) {
+        fatal(MYNAME ": Unable to convert date (%s)!\n", cin);
+      }
+      wpt->SetCreationTime(mkgmtime(&tm));
+      break;
+
+    case WAYPT__OFS + 1:
+      wpt->description = (cin);
+      break;
+
+    case WAYPT__OFS + 2:
+      wpt->icon_descr = gt_find_desc_from_icon_number(
+                          atoi(cin), PCX);
+      break;
+
+    case WAYPT__OFS + 4:
+      if (strcmp(cin, "S+C") == 0) {
+        garmin_fs_t::set_display(gmsd, gt_display_mode_symbol_and_comment);
+      } else if (strcmp(cin, "S") == 0) {
+        garmin_fs_t::set_display(gmsd, gt_display_mode_symbol);
+      } else if (strcmp(cin, "S+N") == 0) {
+        garmin_fs_t::set_display(gmsd, gt_display_mode_symbol_and_name);
+      }
+      break;
+
+    case WPT_cA_OFS + 1:
+    case WPT_c1_OFS + 1:
+      wpt->shortname = cin;
+      break;
+
+    case WPT_cA_OFS + 4:
+    case WPT_c4_OFS + 2:
+      garmin_fs_t::set_city(gmsd, cin);
+      break;
+
+    case WPT_cA_OFS + 5:
+    case WPT_c4_OFS + 3:
+      garmin_fs_t::set_state(gmsd, cin);
+      break;
+
+    case WPT_cA_OFS + 6:
+    case WPT_c4_OFS + 4:
+      garmin_fs_t::set_cc(gmsd, cin);
+      break;
+
+    case WPT_cB_OFS + 1:
+    case WPT_c6_OFS + 2:
+      garmin_fs_t::set_facility(gmsd, cin);
+      break;
+
+    case WPT_cB_OFS + 2:
+    case WPT_c6_OFS + 3:
+      garmin_fs_t::set_addr(gmsd, cin);
+      break;
+
+    case WPT_cB_OFS + 3: /*cross road */
+    case WPT_c6_OFS + 4:
+      garmin_fs_t::set_cross_road(gmsd, cin);
+      break;
+
+    case TRKPT__OFS + 2: /* altitude */
+    case WPT_cC_OFS + 1:
+    case WPT_c5_OFS + 1:
+    case WPT_c8_OFS + 1:
+      wpt->altitude = altf * atof(cin);
+      break;
+
+    case TRKPT__OFS + 3: /* depth */
+    case WPT_cC_OFS + 2:
+    case WPT_c5_OFS + 2:
+    case WPT_c8_OFS + 2:
+      WAYPT_SET(wpt, depth, altf * atof(cin));
+      break;
+
+    case TRKPT__OFS + 10: /* temperature */
+      if (*cin == '|') {
+        cin++;  /* in track points */
+      }
+      if (strcmp(cin, "1e25") == 0) {
+        break;
+      }
+      if (strcmp(cin, "1.0e25") == 0) {
+        break;
+      }
+      [[fallthrough]];
+    case WPT_cD_OFS + 1:
+    case WPT_cB_OFS + 6:
+      WAYPT_SET(wpt, temperature, atof(cin));
+      break;
+
+    case WAYPT__OFS + 6: /* proximity */
+    case WPT_cD_OFS + 2:
+      WAYPT_SET(wpt, proximity, atof(cin));
+      break;
+
+    case WPT_cB_OFS + 5:
+    case WPT_cD_OFS + 3:
+      categories = atoi(cin);
+      if (categories != 0) {
+        garmin_fs_t::set_category(gmsd, atoi(cin));
+      }
+      break;
+
+#if 0
+
+      /* currently unused */
+
+    case TRKPT__OFS + 5: /* distance from previous point */
+    case TRKPT__OFS + 6: /* distance from segment start */
+    case TRKPT__OFS + 7: /* distance from start */
+    case TRKPT__OFS + 8: /* velocity from previous point */
+    case TRKPT__OFS + 9: /* time (in seconds) from previous point */
+      break;
+
+    case WAYPT__OFS + 3: /* ignore color */
+      break;
+
+    case WAYPT__OFS + 5: /* always '0' */
+      break;
+
+    case TRKPT__OFS + 4:
+      if (case_ignore_strcmp(cin, "FT") == 0) ;
+      else if (case_ignore_strcmp(cin, "M") == 0) ;
+      else if (case_ignore_strcmp(cin, "SM") == 0) ;
+      else if (case_ignore_strcmp(cin, "NM") == 0) ;
+      else if (case_ignore_strcmp(cin, "KM") == 0) ;
+      break;
+
+    case WPT_cB_OFS + 4: /* unknown (datatype) */
+      break;
+
+    case WPT_cC_OFS + 3: /* waypt_class (always FF) */
+      break;
+
+    case WPT_cC_OFS + 4: /* class & subclass */
+    case WPT_cC_OFS + 5:
+    case WPT_cC_OFS + 6:
+    case WPT_cC_OFS + 7:
+    case WPT_cC_OFS + 8:
+    case WPT_cC_OFS + 9:
+    case WPT_cC_OFS + 10:
+    case WPT_cC_OFS + 11:
+    case WPT_cC_OFS + 12:
+    case WPT_cC_OFS + 13:
+    case WPT_cC_OFS + 14:
+    case WPT_cC_OFS + 15:
+    case WPT_cC_OFS + 16:
+    case WPT_cC_OFS + 17:
+    case WPT_cC_OFS + 18:
+    case WPT_cC_OFS + 19:
+    case WPT_cC_OFS + 20:
+    case WPT_cC_OFS + 21:
+      break;
+
+    case WPT_cC_OFS + 22:
+      /* distance */
+      break;
+#endif
+    }
+  }
+}
+
+static Waypoint*
+parse_waypt(char* buff)
+{
+  char* cin;
+  struct tm tm;
+
+  auto* wpt = new Waypoint;
+  garmin_fs_t* gmsd = garmin_fs_alloc(-1);
+  wpt->fs.FsChainAdd(gmsd);
+
+  if (gardown) {
+    cin = buff + 6;
+  } else {
+    /* We've seen waypoints with length of 14 and 15 !!! */
+    cin = buff + 15;
+    while ((cin > buff) && (! isspace(*cin))) {
+      cin--;
+    }
+  }
+
+  while (isspace(*cin)) {
+    cin--;
+  }
+  if (cin >= buff) {
+    char*s = xstrndup(buff, cin - buff + 1);
+    wpt->shortname = s;
+    xfree(s);
+  }
+
+  if (gardown) {
+    buff += 6;
+  } else {
+    buff += 15;
+  }
+  while (isspace(*buff)) {
+    buff++;
+  }
+
+  buff += parse_coordinates(buff, datum, grid,
+                            &wpt->latitude, &wpt->longitude, MYNAME);
+  while (isspace(*buff)) {
+    buff++;
+  }
+
+  memset(&tm, 0, sizeof(tm));
+  char* cerr = strptime(buff, "%a %b %d %H:%M:%S %Y", &tm);
+  if (cerr == nullptr) {
+    fatal(MYNAME ": Unable to convert date (%s)!\n", buff);
+  }
+  wpt->SetCreationTime(mkgmtime(&tm));
+
+  /* go over time stamp */
+  int i = 5;
+  while (buff && i) {
+    i--;
+    buff = strchr(buff, ' ');
+    if (buff) {
+      buff++;
+    }
+  }
+  if (gardown && (buff == nullptr)) {
+    return wpt;
+  }
+  is_fatal((buff == nullptr), MYNAME ": Incomplete waypoint line!");
+
+  while (isspace(*buff)) {
+    buff++;
+  }
+
+  parse_line(buff, WAYPT__OFS, "^", wpt);
+
+  return wpt;
+}
+
+static Waypoint*
+parse_trkpt(char* buff)
+{
+  auto* wpt = new Waypoint;
+  garmin_fs_t* gmsd = garmin_fs_alloc(-1);
+  wpt->fs.FsChainAdd(gmsd);
+
+  parse_line(buff, TRKPT__OFS, ";", wpt);
+
+  return wpt;
+}
+
+/*
+ * parse_categories is currently only a dummy procedure.
+ * w'll need a central storage with binding to the module
+ * which has established a list of category names.
+ */
+
+static void
+parse_categories(char* buff)
+{
+  char* cin;
+  int cat = 0;
+
+  while ((cin = csv_lineparse(buff, ",", "", cat++))) {
+    uint16_t cx;
+
+    buff = nullptr;
+
+    cin = lrtrim(cin);
+    if (*cin == 0) {
+      continue;
+    }
+
+    garmin_fs_convert_category(cin, &cx);
+  }
+}
+
+
+/* main functions */
+
+static void
+rd_init(const QString& fname)
+{
+  fin = gbfopen(fname, "rb", MYNAME);
+
+  gardown = 1;
+  mode = wptdata;
+  grid = grid_lat_lon_dmm;
+  datum = DATUM_WGS84;
+  altf = 1;
+  event_ct = 0;
+}
+
+static void
+rd_deinit()
+{
+  gbfclose(fin);
+}
+
+static void
+data_read()
+{
+  char* buff;
+  int line = 0;
+  Waypoint* wpt = nullptr;
+  route_head* head = nullptr;
+
+  while ((buff = gbfgetstr(fin))) {
+    if ((line++ == 0) && fin->unicode) {
+      cet_convert_init(CET_CHARSET_UTF8, 1);
+    }
+
+    char* cin = lrtrim(buff);
+    if (!*cin) {
+      continue;
+    }
+
+    char* cdata = cin+1;
+    while (! isspace(*cdata)) {
+      cdata++;
+    }
+    while (isspace(*cdata)) {
+      cdata++;
+    }
+    if (! *cdata) {
+      continue;
+    }
+
+    switch (*cin) {
+
+    case '#': /* comment */
+      break;
+
+    case 'A':
+      if (case_ignore_strncmp(cdata, "Meter", 5) == 0) {
+        altf = 1.0;
+      } else if (case_ignore_strncmp(cdata, "Feet", 4) == 0) {
+        altf = FEET_TO_METERS(1.0);
+      }
+      break;
+
+    case 'C': /* categories */
+      parse_categories(cdata);
+      break;
+
+    case 'D':
+      datum = gt_lookup_datum_index(cdata, MYNAME);
+      break;
+
+    case 'I': /* event point */
+      wpt = new Waypoint;
+      cdata += parse_coordinates(cdata, datum, grid,
+                                 &wpt->latitude, &wpt->longitude, MYNAME);
+      wpt->shortname = QString("Event%1").arg(++event_ct);
+      while (isspace(*cdata)) {
+        cdata++;
+      }
+      if (*cdata == ';') {
+        cdata++;
+        wpt->icon_descr = gt_find_desc_from_icon_number(
+                            atoi(cdata), PCX);
+      }
+      waypt_add(wpt);
+      break;
+
+    case 'M':
+      grid = gt_lookup_grid_type(cdata, MYNAME);
+      break;
+
+    case 'P': /* proximity waypoint */
+    case 'W': /* normal waypoint */
+      wpt = parse_waypt(cin + 3);
+      if (wpt) {
+        if (mode == rtedata) {
+          route_add_wpt(head, wpt);
+        } else {
+          waypt_add(wpt);
+        }
+      }
+      break;
+
+    case 'c': /* additional lines */
+      switch (*(cin+1)) {
+        int index;
+
+      case 'A':
+      case 'B':
+      case 'C':
+      case 'D':
+
+        index = WPT_cA_OFS + ((*(cin+1) - 'A') * 256);
+        parse_line(cdata, index, "|", wpt);
+        break;
+
+      case '1':
+      case '2':
+      case '3':
+      case '4':
+      case '5':
+      case '6':
+      case '7':
+      case '8':
+
+        index = WPT_c0_OFS + ((*(cin+1) - '0') * 256);
+        parse_line(cdata, index, ";", wpt);
+        break;
+
+      case 'L':
+        waypt_add_url(wpt, cdata, nullptr);
+        break;
+
+      default:
+        break;
+      }
+      break;
+
+    case 'N':  /* track log header */
+      mode = trkdata;
+      head = new route_head;
+      cdata = strchr(cdata, '-');
+      if (cdata) {
+        while (isspace(*cdata)) {
+          cdata++;
+        }
+        if (*cdata) {
+          char* s = strrchr(cdata, ',');
+          if (s) {
+            *s = '\0';
+            s = strrchr(cdata, ',');
+            if (s) {
+              *s = '\0';
+              head->rte_name = cdata;
+            }
+          }
+        }
+      }
+      track_add_head(head);
+      break;
+
+    case 'R':  /* route header */
+      mode = rtedata;
+      head = new route_head;
+      cdata += 3; /*skip route number */
+      if (*cdata) {
+        head->rte_name = cdata;
+      }
+      route_add_head(head);
+      break;
+
+    case 'T':
+      wpt = parse_trkpt(cdata);
+      if (wpt) {
+        track_add_wpt(head, wpt);
+      }
+      break;
+
+    case 'V':
+      if (strcmp(cin, G7T_HEADER) != 0) {
+        fatal(MYNAME ": Invalid version or invalid file!\n");
+      }
+      gardown = 0;
+      break;
+
+    default:
+      break;
+    }
+  }
+}
+
+/* --------------------------------------------------------------------------- */
+
+ff_vecs_t g7towin_vecs = {
+  ff_type_file,
+  { ff_cap_read, ff_cap_read, ff_cap_read },
+  rd_init,
+  nullptr,
+  rd_deinit,
+  nullptr,
+  data_read,
+  nullptr,
+  nullptr,
+  &g7towin_args,
+  CET_CHARSET_MS_ANSI, 0
+  , NULL_POS_OPS,
+  nullptr
+};
+
+#endif /* CSVFMTS_ENABLED */
diff --git a/deprecated/gopal.cc b/deprecated/gopal.cc
new file mode 100644 (file)
index 0000000..d80e775
--- /dev/null
@@ -0,0 +1,403 @@
+/*
+
+
+       Copyright (C) 2008  Dr. J�rgen Neumann, Juergen.Neumann@online.de
+       Copyright (C) 2005  Robert Lipe, robertlipe+source@gpsbabel.org (based on nmea.c)
+       Copyright (C) 20XX  probably many others from the gpsbabel development team ;-)
+
+       This program is free software; you can redistribute it and/or modify
+       it under the terms of the GNU General Public License as published by
+       the Free Software Foundation; either version 2 of the License, or
+       (at your option) any later version.
+
+       This program is distributed in the hope that it will be useful,
+       but WITHOUT ANY WARRANTY; without even the implied warranty of
+       MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+       GNU General Public License for more details.
+
+       You should have received a copy of the GNU General Public License
+       along with this program; if not, write to the Free Software
+       Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+
+       =====================================================================================
+
+       This file allows gpsbabel to read and write the internal track log format used by
+       GoPal navigation systems. They produce a simple line-oriented format with one point per
+       second. Unfortunately the the data does not contain a valid date, only some kind of timetick,
+       together with each point (perhaps by mistake ??). So we have to parse the filename for a valid starting
+       date and add the timeoffset. Second problem (at least to me) was that irregularly stupid errors were
+       in the data, i.e. only one data point shows a totally wrong longitude or latitude. Everything else in
+       the dataset seems ok, so I needed a way to sort out these errors. My solution is to calculate the speed
+       between successive points and drop points not between minspeed and maxspeed. This way I can sort out most
+       of this annoying bugs, a side effect is that if a minimum speed > 0 is set points with the same coordinates are also
+       dropped.
+
+       Fileformat GoPal
+       TICK;   TIME UTC; LONG;    LAT;       HEIGHT; SPEED km/h;  FIX; HDOP;     SAT
+       3801444, 080558, 2.944362, 43.262117, 295.28, 0.12964, 2, 2.900000, 3
+       Filenames:
+               trackYYYYMMDD_HHMMSS.trk
+               A_YYYYMMDD_HHMMSS.trk
+       with HHMMSS local time (not UTC)
+
+       History
+       2008-07-18 initial release of Version 0.1
+       2008-07-26 bugfix: filenamehandling linux, format specification in write statement
+
+       ToDo:
+       - check for midnight & adjust
+*/
+
+#include "defs.h"
+#include "cet_util.h"
+#include "csv_util.h"
+#include "grtcirc.h"
+#include "jeeps/gpsmath.h"
+#include "strptime.h"
+#include <cmath>
+#include <cstdio>
+#include <cstdlib>
+#include <QDateTime>
+#include <QString>
+
+#define MYNAME "gopal"
+
+static gbfile* fin, *fout;
+
+static struct tm tm,filenamedate, trackdate;
+static time_t          tx;
+static char* optdate=nullptr;
+static char* optmaxspeed=nullptr;
+static char* optminspeed=nullptr;
+static char* optclean= nullptr;
+static double minspeed,maxspeed;
+static struct tm opt_tm;       /* converted "date" parameter */
+static
+QVector<arglist_t> gopal_args = {
+  {"date", &optdate, "Complete date-free tracks with given date (YYYYMMDD).", nullptr, ARGTYPE_INT, ARG_NOMINMAX, nullptr },
+  {"maxspeed", &optmaxspeed, "The maximum speed (km/h) traveling from waypoint to waypoint.", "200", ARGTYPE_INT, "1", "1000", nullptr },
+  {"minspeed", &optminspeed, "The minimum speed (km/h) traveling from waypoint to waypoint. Set >0 to remove duplicate waypoints", "0", ARGTYPE_INT, "0", "999", nullptr },
+  {"clean", &optclean, "Cleanup common errors in trackdata", "1", ARGTYPE_BOOL, ARG_NOMINMAX, nullptr },
+};
+
+#define CHECK_BOOL(a) if (a && (*a == '0')) a = NULL
+
+static int gopal_check_line(char* line)
+{
+  char* c = line;
+  int i = 0;
+  while ((c = strchr(c, ','))) {
+    c++;
+    i++;
+  }
+  return i;
+}
+
+
+
+/*******************************************************************************
+* %%%        global callbacks called by gpsbabel main process              %%% *
+*******************************************************************************/
+
+static void
+gopal_rd_init(const QString& fname)
+{
+  CHECK_BOOL(optclean);
+  if (optminspeed) {
+    minspeed=atof(optminspeed);
+    if (global_opts.debug_level > 1) {
+      fprintf(stderr,"options from command line : gopal minspeed = %s\n",optminspeed);
+    }
+  } else {
+    minspeed=0;
+  }
+  if (optmaxspeed) {
+    maxspeed=atof(optmaxspeed);
+    if (global_opts.debug_level > 1) {
+      fprintf(stderr,"options from command line : gopal maxspeed = %s\n",optmaxspeed);
+    }
+  } else {
+    maxspeed=200;
+  }
+  if (global_opts.debug_level > 1) {
+    fprintf(stderr,"setting minspeed to %5.1lf km/h and maxspeed to %5.1lf km/h\n",minspeed,maxspeed);
+  }
+
+  fin = gbfopen(fname, "r", MYNAME);
+
+  if (optdate) {
+    memset(&opt_tm, 0, sizeof(opt_tm));
+
+    char* ck = strptime(optdate, "%Y%m%d", &opt_tm);
+    if ((ck == nullptr) || (*ck != '\0') || (strlen(optdate) != 8)) {
+      fatal(MYNAME ": Invalid date \"%s\"!\n", optdate);
+    } else if (opt_tm.tm_year < 70) {
+      fatal(MYNAME ": Date \"%s\" is out of range (have to be 19700101 or later)!\n", optdate);
+    }
+    tx = mkgmtime(&opt_tm);
+
+  } else {
+    /* remove path */
+    QString filename = get_filename(fname);
+       QString datestr;
+
+    if (filename.startsWith("track")&&(filename.length()>13)) { // we need at least 13 letters: trackYYYYMMDD...
+      datestr = filename.mid(5,8);
+    } else if (filename.startsWith("A_")&&(filename.length()>10)) { // here we expect at least 10 letters: A_YYYYMMDD...
+      datestr = filename.mid(2,8);
+    }
+    // in buff we should now have something which looks like a valid date starting with YYYYMMDD
+    /*ck = (char*)*/strptime(qPrintable(datestr), "%Y%m%d", &filenamedate);
+    // if (((ck == NULL) || (*ck != '\0') )&&!(optdate))
+    // fatal(MYNAME ": Invalid date in filename \"%s\", try to set manually using \"date\" switch!\n", buff);
+    // /* else */ if (filenamedate.tm_year < 70)
+    // fatal(MYNAME ": Date \"%s\" is out of range (have to be 19700101 or later)!\n", buff);
+    // tx= mkgmtime(&filenamedate);
+  }
+}
+
+static void
+gopal_rd_deinit()
+{
+  gbfclose(fin);
+}
+
+static void
+gopal_read()
+{
+
+  char* buff;
+  double hmsd;
+  int fix;
+  int hms;
+  Waypoint* lastwpt=nullptr;
+  char tbuffer[64];
+  struct tm tm2;
+  double lat_old = 0;
+
+
+  auto* route = new route_head;
+  QDateTime qtx = QDateTime::fromSecsSinceEpoch(tx, Qt::UTC);
+  route->rte_name = "Tracklog ";
+  route->rte_name += qtx.toString(Qt::ISODate);
+  route_add_head(route);
+
+  long line = 0;
+  while ((buff = gbfgetstr(fin))) {
+    if ((line == 0) && fin->unicode) {
+      cet_convert_init(CET_CHARSET_UTF8, 1);
+    }
+
+    char* str = buff = lrtrim(buff);
+    if (*buff == '\0') {
+      continue;
+    }
+    int nfields = gopal_check_line(buff);
+    if ((nfields != 8) && (nfields != 11)) {
+      continue;
+    }
+    // Old format.  Hassle for date.
+    if ((nfields == 8) && (tx == 0)) {
+      // fatal(MYNAME ": Invalid date in filename \"%s\", try to set manually using \"date\" switch!\n", buff);
+    }
+    auto* wpt = new Waypoint;
+
+    int column = -1;
+    // the format of gopal is quite simple. Unfortunately the developers forgot the date as the first element...
+    //TICK;    TIME;   LONG;     LAT;       HEIGHT; SPEED;  Fix; HDOP;    SAT
+    //3801444, 080558, 2.944362, 43.262117, 295.28, 0.12964, 2, 2.900000, 3
+    char* c = csv_lineparse(str, ",", "", column++);
+    int millisecs = 0;
+    while (c != nullptr) {
+      switch (column) {
+      case  0: /* "-" */       /* unknown fields for the moment */
+        unsigned long microsecs;
+        sscanf(c, "%lu", &microsecs);
+        // Just save this; we'll use it on the next field.
+        millisecs = lround((microsecs % 1000000) / 1000.0);
+        break;
+      case  1:                         /* Time UTC */
+        sscanf(c,"%lf",&hmsd);
+        hms = (int) hmsd;
+        tm.tm_sec = hms % 100;
+        hms = hms / 100;
+        tm.tm_min = hms % 100;
+        hms = hms / 100;
+        tm.tm_hour = hms % 100;
+        tm.tm_year=trackdate.tm_year;
+        tm.tm_mon=trackdate.tm_mon;
+        tm.tm_mday=trackdate.tm_mday;
+        // This will probably be overwritten by field 9...if we have 9 fields.
+        wpt->SetCreationTime(tx+((((time_t)tm.tm_hour * 60) + tm.tm_min) * 60) + tm.tm_sec);
+        wpt->creation_time = wpt->creation_time.addMSecs(millisecs);
+        if (global_opts.debug_level > 1) {
+          time_t t = wpt->GetCreationTime().toTime_t();
+          strftime(tbuffer, sizeof(tbuffer), "%c", gmtime(&t));
+          printf("parsed timestamp: %s\n",tbuffer);
+        }
+        break;
+
+      case  2:                                 /* longitude */
+        sscanf(c, "%lf", &wpt->longitude);
+        break;
+
+      case  3:                                 /* latitude */
+        sscanf(c, "%lf", &wpt->latitude);
+        break;
+      case  4:                                 /* altitude */
+        sscanf(c, "%lf", &wpt->altitude);
+        break;
+      case  5:                                 /* speed */
+        //sscanf(c, "%lf", &wpt->speed);
+        wpt->speed=atof(c);
+        if (global_opts.debug_level > 1) {
+          printf("parsed speed: %8.5f\n",wpt->speed);
+        }
+        break;
+      case  6:                                 /* type of fix */
+        sscanf(c, "%d", &fix);
+        //my device shows only 0 or 2
+        //should i guess from no of sats if 2d or 3d?
+        switch (fix) {
+        case 0:
+          wpt->fix = fix_none;
+          break;
+        case 2:
+          wpt->fix = fix_2d;
+          break;
+          //case 3: wpt->fix = fix_3d;break;
+          //case 4: wpt->fix = fix_dgps;break; /* 2D_diff */
+          //case 5: wpt->fix = fix_dgps;break; /* 3D_diff */
+        default:
+          wpt->fix = fix_unknown;
+          break;
+        }
+        break;
+      case  7:                                 /* hdop */
+        wpt->hdop = atof(c);
+        //sscanf(c, "%lf", &wpt->hdop); does not work ???
+        //wpt->vdop=0;wpt->hdop=0;
+        break;
+      case  8:                                 /* number of sats */
+        sscanf(c, "%d", &wpt->sat);
+        break;
+        // Somewhere around mid/late 2009, these files started
+        // seeing 11 fields.
+      case  9:
+        memset(&tm2, 0, sizeof(tm2));
+        if (!strptime(c, "%Y%m%d", &tm2)) {
+          fatal("Bad date '%s'.\n", c);
+        }
+        wpt->creation_time = wpt->creation_time.addSecs(mkgmtime(&tm2));
+        break;
+      case 10:  // Unknown.  Ignored.
+      case 11:  // Bearing.  Ignored.
+        break;
+      }
+      c = csv_lineparse(nullptr, ",", "", column++);
+    }
+    line++;
+
+    if ((wpt->fix != fix_none)&&(lat_old==0)) { //first-time init
+      lat_old=wpt->latitude;
+      //route_add_wpt(route, wpt);
+      lastwpt=wpt;
+    }
+    //calculate the speed to reach this waypoint from the last. This way I try to sort out invalid waypoints
+    double speed = 0;
+    if (lastwpt !=nullptr) {
+      speed=3.6*radtometers(gcdist(RAD(lastwpt->latitude), RAD(lastwpt->longitude), RAD(wpt->latitude), RAD(wpt->longitude))) /
+            abs((int)(wpt->creation_time.toTime_t() - lastwpt->GetCreationTime().toTime_t()));
+      //printf("speed line %d %lf \n",line,speed);
+    }
+    /* Error handling: in the tracklog of my device sometimes "jump" waypoints ;-) */
+    if ((optclean) &&
+         (((wpt->longitude==0.0)|| (wpt->latitude==0.0)||(std::abs(wpt->latitude)>90)||(std::abs(wpt->longitude)>180))||
+          ((speed>maxspeed)||(speed<minspeed)))
+       ) {
+      if (global_opts.debug_level > 1) {
+        fprintf(stderr,"Problem in or around line %5ld: \"%s\" %lf km/h\n",line,buff,speed);
+      }
+    } else {
+      if (global_opts.debug_level > 1) {
+        fprintf(stderr,"valid                line %5ld: \"%s\" %lf km/h\n",line,buff,speed);
+      }
+      lastwpt=wpt;
+      lat_old=wpt->latitude;
+      route_add_wpt(route,wpt);
+      waypt_add(new Waypoint(*wpt));
+    }
+  }
+}
+
+static void
+gopal_write_waypt(const Waypoint* wpt)
+{
+  int fix=fix_unknown;
+  //TICK;    TIME;   LONG;     LAT;       HEIGHT; SPEED;  UN; HDOP;     SAT
+  //3801444, 080558, 2.944362, 43.262117, 295.28, 0.12964, 2, 2.900000, 3
+  QString tbuffer = wpt->creation_time.toString("HHmmss");
+  if (wpt->fix!=fix_unknown) {
+    switch (wpt->fix) {
+    case fix_none:
+      fix = 0;
+      break;
+    case fix_2d:
+      fix = 2;
+      break;
+    default:
+      fix = 0;
+      break;
+    }
+  }
+  //MSVC handles time_t as int64, gcc and mac only int32, so convert it:
+  unsigned long timestamp = (unsigned long)wpt->GetCreationTime().toTime_t();
+  gbfprintf(fout, "%lu, %s, %lf, %lf, %5.1lf, %8.5lf, %d, %lf, %d\n",timestamp, CSTR(tbuffer),  wpt->longitude, wpt->latitude,wpt->altitude,
+            wpt->speed,fix,wpt->hdop,wpt->sat);
+}
+
+
+static void
+gopal_wr_init(const QString& fname)
+{
+  fout = gbfopen(fname, "w", MYNAME);
+}
+
+static void
+gopal_wr_deinit()
+{
+  gbfclose(fout);
+}
+
+static void
+gopal_write()
+{
+  route_disp_all(nullptr, nullptr, gopal_write_waypt);
+}
+
+/**************************************************************************/
+
+// capabilities below means: we can only read and write waypoints
+//
+
+ff_vecs_t gopal_vecs = {
+  ff_type_file,
+  {
+    ff_cap_none                /* waypoints */,
+    (ff_cap)(ff_cap_read | ff_cap_write)       /* tracks */,
+    ff_cap_none        /* routes */
+  },
+  gopal_rd_init,
+  gopal_wr_init,
+  gopal_rd_deinit,
+  gopal_wr_deinit,
+  gopal_read,
+  gopal_write,
+  nullptr,
+  &gopal_args,
+  CET_CHARSET_ASCII, 0 /* ascii is the expected character set */
+  /* not fixed, can be changed through command line parameter */
+  , NULL_POS_OPS,
+  nullptr
+};
+/**************************************************************************/
diff --git a/deprecated/gpsman.style b/deprecated/gpsman.style
new file mode 100644 (file)
index 0000000..e8d1e36
--- /dev/null
@@ -0,0 +1,34 @@
+# gpsbabel XCSV style file
+#
+# Format: GPSMAN Format
+# Author: Alex Mottram
+#   Date: 12/09/2002
+#
+#
+# As defined in gpsman.c
+#
+#
+
+DESCRIPTION            GPSman
+SHORTLEN               8
+SHORTWHITE             0
+
+# FILE LAYOUT DEFINITIIONS:
+#
+FIELD_DELIMITER                TAB
+RECORD_DELIMITER       NEWLINE
+BADCHARS               TAB
+
+PROLOGUE       !Format: DDD 1 WGS 84
+PROLOGUE       !W:
+
+#
+# INDIVIDUAL DATA FIELDS, IN ORDER OF APPEARANCE:
+#
+IFIELD SHORTNAME, "", "%-8.8s"
+IFIELD DESCRIPTION, "", "%s"
+IFIELD LAT_DIRDECIMAL, "", "%c%f"
+IFIELD LON_DIRDECIMAL, "", "%c%f"
+IFIELD IGNORE, "", "%s"
+
+# gpsman.c likes mkshort len = 8, whitespace = 0.
diff --git a/deprecated/gpsutil.cc b/deprecated/gpsutil.cc
new file mode 100644 (file)
index 0000000..c9ccd17
--- /dev/null
@@ -0,0 +1,186 @@
+/*
+    Access gpsutil files.
+
+    Copyright (C) 2002, 2003, 2004 Robert Lipe, robertlipe+source@gpsbabel.org
+
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+
+ */
+
+
+#include "defs.h"
+#include "cet_util.h"
+#include "magellan.h"
+#include <cmath>
+#include <cstdio>
+#include <cstdlib>
+
+static gbfile* file_in, *file_out;
+static short_handle mkshort_handle;
+
+#define MYNAME "GPSUTIL"
+
+static void
+rd_init(const QString& fname)
+{
+  file_in = gbfopen(fname, "rb", MYNAME);
+}
+
+static void
+rd_deinit()
+{
+  gbfclose(file_in);
+}
+
+static void
+wr_init(const QString& fname)
+{
+  file_out = gbfopen(fname, "w", MYNAME);
+  mkshort_handle = mkshort_new_handle();
+}
+
+static void
+wr_deinit()
+{
+  gbfclose(file_out);
+  mkshort_del_handle(&mkshort_handle);
+}
+
+static void
+data_read()
+{
+  char* ibuf;
+  char desc[31];
+  double lat,lon;
+  char latdir, londir;
+  long alt;
+  char alttype;
+  char icon[3];
+  int line = 0;
+  /*
+   * Make sure that all waypoints in single read have same
+   * timestamp.
+   */
+  time_t now = current_time().toTime_t();
+  icon[0] = 0;
+
+  while ((ibuf = gbfgetstr(file_in))) {
+    char* sn;
+
+    if ((line++ == 0) && file_in->unicode) {
+      cet_convert_init(CET_CHARSET_UTF8, 1);
+    }
+
+    /*  A sharp in column zero or an blank line is a comment */
+    ibuf = lrtrim(ibuf);
+    int len = strlen(ibuf);
+    if ((len == 0) || (*ibuf == '#')) {
+      continue;
+    }
+
+    if (len > 71) {
+      int offs = len - 71;
+      sn = xstrndup(ibuf, offs + 8);
+      ibuf += (offs + 9);
+    } else {
+      sn = xstrndup(ibuf, 8);
+      ibuf += 9;
+    }
+
+    int n = sscanf(ibuf, "%lf%c %lf%c %ld%c %30[^,] %2s",
+                   &lat, &latdir, &lon, &londir,
+                   &alt, &alttype, desc, icon);
+    /* Require at least first three fields, otherwise ignore */
+    if (n < 2) {
+      xfree(sn);
+      continue;
+    }
+    rtrim(sn);
+    rtrim(desc);
+    rtrim(icon);
+    auto* wpt_tmp = new Waypoint;
+    wpt_tmp->altitude = alt;
+    wpt_tmp->shortname = sn;
+    xfree(sn);
+    wpt_tmp->description = desc;
+    wpt_tmp->SetCreationTime(now);
+
+    if (latdir == 'S') {
+      lat = -lat;
+    }
+    if (londir == 'W') {
+      lon = -lon;
+    }
+
+    lat /= 100.0;
+    lon /= 100.0;
+    int ilon = (int)(lon);
+    wpt_tmp->longitude = ilon + (lon - ilon)*(100.0/60.0);
+    int ilat = (int)(lat);
+    wpt_tmp->latitude = ilat + (lat - ilat) * (100.0/60.0);
+    wpt_tmp->icon_descr = mag_find_descr_from_token(icon);
+    waypt_add(wpt_tmp);
+  }
+}
+
+static void
+gpsutil_disp(const Waypoint* wpt)
+{
+  char* tdesc = xstrdup(wpt->description);
+
+  QString icon_token = mag_find_token_from_descr(wpt->icon_descr);
+
+  double lon = degrees2ddmm(wpt->longitude);
+  double lat = degrees2ddmm(wpt->latitude);
+
+  gbfprintf(file_out, "%-8.8s %08.3f%c %09.3f%c %07.0f%c %-30.30s %s\n",
+            global_opts.synthesize_shortnames ?
+            CSTRc(mkshort_from_wpt(mkshort_handle, wpt)) :
+            CSTRc(wpt->shortname),
+            fabs(lat),
+            lat < 0.0 ? 'S' : 'N',
+            fabs(lon),
+            lon < 0.0 ? 'W' : 'E',
+            ((wpt->altitude == unknown_alt) ||
+             (wpt->altitude < 0.0)) ? 0 : wpt->altitude,
+            'm',
+            CSTRc(wpt->description) ? tdesc : "",
+            CSTR(icon_token));
+
+  xfree(tdesc);
+}
+
+static void
+data_write()
+{
+  waypt_disp_all(gpsutil_disp);
+}
+
+
+ff_vecs_t gpsutil_vecs = {
+  ff_type_file,
+  FF_CAP_RW_WPT,
+  rd_init,
+  wr_init,
+  rd_deinit,
+  wr_deinit,
+  data_read,
+  data_write,
+  nullptr,
+  nullptr,
+  CET_CHARSET_ASCII, 0 /* CET-REVIEW */
+  , NULL_POS_OPS,
+  nullptr
+};
diff --git a/deprecated/jogmap.cc b/deprecated/jogmap.cc
new file mode 100644 (file)
index 0000000..e590a41
--- /dev/null
@@ -0,0 +1,113 @@
+/*
+
+       Support for XML files from jogmap.de
+
+       Copyright (C) 2009 Robert Lipe  robertlipe+source@gpsbabel.org
+
+       This program is free software; you can redistribute it and/or modify
+       it under the terms of the GNU General Public License as published by
+       the Free Software Foundation; either version 2 of the License, or
+       (at your option) any later version.
+
+       This program is distributed in the hope that it will be useful,
+       but WITHOUT ANY WARRANTY; without even the implied warranty of
+       MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+       GNU General Public License for more details.
+
+       You should have received a copy of the GNU General Public License
+       along with this program; if not, write to the Free Software
+       Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+
+*/
+
+
+#include "defs.h"
+#include "garmin_tables.h"
+#include "jeeps/gpsmath.h"
+#include "xmlgeneric.h"
+#include <QXmlStreamAttributes>
+
+static route_head* trk;
+
+static QVector<arglist_t> jogmap_args = {
+};
+
+#define MYNAME "xol"
+
+// static xg_callback  jogmap_shape, xol_shape_end;
+// static xg_callback  jogmap_waypt, xol_overlay;
+
+#define XOL "/overlays/overlay"
+
+
+
+static void
+jogmap_markers(xg_string, const QXmlStreamAttributes*)
+{
+  trk = new route_head;
+  track_add_head(trk);
+}
+
+static void
+jogmap_marker(xg_string, const QXmlStreamAttributes* attrv)
+{
+  auto* wpt = new Waypoint;
+
+  if (attrv->hasAttribute("lat")) {
+    wpt->latitude = attrv->value("lat").toString().toDouble();
+  }
+
+  if (attrv->hasAttribute("lng")) {
+    wpt->longitude = attrv->value("lng").toString().toDouble();
+  }
+
+  if (trk) {
+    track_add_wpt(trk, wpt);
+  }
+}
+
+static
+xg_tag_mapping jogmap_map[] = {
+  { jogmap_markers,    cb_start,       "/markers" },
+  { jogmap_marker,     cb_start,       "/markers/marker" },
+  { nullptr,   (xg_cb_type)0,          nullptr }
+};
+
+static void
+jogmap_rd_init(const QString& fname)
+{
+  trk = nullptr;
+  xml_init(fname, jogmap_map, nullptr);
+}
+
+static void
+jogmap_read()
+{
+  xml_read();
+}
+
+static void
+jogmap_rd_deinit()
+{
+  xml_deinit();
+}
+
+ff_vecs_t jogmap_vecs = {
+  ff_type_file,
+  {
+    ff_cap_none,               /* waypoints */
+    ff_cap_read,               /* tracks */
+    ff_cap_none
+  },   /* routes */
+  jogmap_rd_init,
+  nullptr,
+  jogmap_rd_deinit,
+  nullptr,
+  jogmap_read,
+  nullptr,
+  nullptr,
+  &jogmap_args,
+  CET_CHARSET_UTF8, 0
+  , NULL_POS_OPS,
+  nullptr
+};
diff --git a/deprecated/jtr.cc b/deprecated/jtr.cc
new file mode 100644 (file)
index 0000000..6d507f3
--- /dev/null
@@ -0,0 +1,335 @@
+/*
+
+    Support for the Jelbert GeoTagger JTR data file format.
+
+    Copyright (C) 2008 Olaf Klein, o.b.klein@gpsbabel.org
+
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+
+ */
+#include "defs.h"
+#include "csv_util.h"
+#include <QHash>
+//#include <cassert>
+#include <cmath>
+#include <cstdio>
+#include <cstdlib>
+#include "nmea.h"
+
+#define MYNAME "jtr"
+
+static
+QVector<arglist_t> jtr_args = {
+};
+
+static gbfile* fin, *fout;
+static QHash<QString, const Waypoint*> trkpts;
+
+void
+jtr_parse_date(const char* str, QDate& date)
+{
+  int dmy = atoi(str);
+  if (dmy > 0) {
+    int year= dmy % 100 + 2000;
+    dmy = dmy / 100;
+    int month = dmy % 100;
+    dmy = dmy / 100;
+    int day = dmy;
+    date = QDate(year, month, day);
+  }
+}
+
+void
+jtr_parse_time(const char* str, QTime& time)
+{
+  char* dot;
+  long int hms = strtol(str, &dot, 10);
+  int sec = hms % 100;
+  hms = hms / 100;
+  int min  = hms % 100;
+  hms = hms / 100;
+  int hour = hms % 100;
+
+  if (*dot == '.') {
+    int milli = atoi(dot + 1) * 10;
+    sec += milli / 1000;
+  }
+
+  time = QTime(hour, min, sec);
+}
+
+/*******************************************************************************
+* %%%        global callbacks called by gpsbabel main process              %%% *
+*******************************************************************************/
+
+static void
+jtr_rd_init(const QString& fname)
+{
+  fin = gbfopen(fname, "r", MYNAME);
+}
+
+static void
+jtr_rd_deinit()
+{
+  trkpts.clear();
+  gbfclose(fin);
+}
+
+static void
+jtr_read()
+{
+  char* str;
+  int line = 0;
+  route_head* trk = nullptr;
+
+  while ((str = gbfgetstr(fin))) {
+    QDate date;
+    QTime time;
+    char valid = 'V';
+    double lon;
+    float course, mcourse, mvar, mdev;
+    char mdevdir;
+
+    line++;
+
+    str = lrtrim(str);
+    if (*str == '\0') {
+      continue;
+    }
+
+    if (strncmp(str, "GEOTAG2,", 8) != 0) {
+      fatal(MYNAME ": Unknown or unsupported file (missing \"GEOTAG2\")!\n");
+    }
+
+    double lat = lon = 999;
+    float speed = course = mcourse = mvar = mdev = -1;
+    char mvardir = mdevdir = 0;
+
+    int column = -1;
+    char* tmp = str;
+    while ((str = csv_lineparse(tmp, ",", "", column++))) {
+      tmp = nullptr;
+
+      if (*str == '\0') {
+        continue;
+      }
+
+      switch (column) {
+      case 0:
+        break;         /* GEOTAG2 */
+      case 1:
+        jtr_parse_time(str, time);
+        break;
+      case 2:
+        valid = *str;
+        break;
+      case 3:
+        lat = ddmm2degrees(atof(str));
+        break;
+      case 4:
+        if (*str == 'S') {
+          lat *= -1;
+        }
+        break;
+      case 5:
+        lon = ddmm2degrees(atof(str));
+        break;
+      case 6:
+        if (*str == 'W') {
+          lon *= -1;
+        }
+        break;
+      case 7:
+        speed = KNOTS_TO_MPS(atof(str));
+        break;
+      case 8:
+        course = atof(str);
+        break;
+      case 9:
+        jtr_parse_date(str, date);
+        break;
+      case 13:
+        mcourse = atof(str);
+        break;
+      case 14:
+        mdev = atof(str);
+        break;
+      case 15:
+        mdevdir = *str;
+        break;
+      case 16:
+        mvar = atof(str);
+        break;
+      case 17:
+        mvardir = *str;
+        break;
+      default:
+        break;
+      }
+    }
+
+    if ((lat == 999) || (lon == 999) || (valid != 'A')) {
+      continue;
+    }
+
+    QDateTime dt = QDateTime(date, time, Qt::UTC);
+
+    /* check for duplicates as suggested in format description */
+    QString buf = QString("%1\01%2\01%3")
+                  .arg(QString::number(lat, 'f', 6),
+                       QString::number(lon, 'f', 6),
+                       QString::number(dt.toSecsSinceEpoch()));
+    if (trkpts.contains(buf)) {
+      continue;
+    }
+
+    auto* wpt = new Waypoint;
+
+    wpt->latitude = lat;
+    wpt->longitude = lon;
+    wpt->SetCreationTime(dt);
+    if (speed >= 0) {
+      WAYPT_SET(wpt, speed, speed);
+    }
+    if (mcourse >= 0) {
+      course = mcourse;
+      if (mvar >= 0) {
+        if (mvardir == 'W') {
+          course += mvar;
+        } else if (mvardir == 'E') {
+          course -= mvar;
+        }
+      }
+      if (mdev >= 0) {
+        if (mdevdir == 'W') {
+          course += mdev;
+        } else if (mdevdir == 'E') {
+          course -= mdev;
+        }
+      }
+    }
+    if (course >= 0) {
+      WAYPT_SET(wpt, course, course);
+    }
+
+    if (trk == nullptr) {
+      trk = new route_head;
+      track_add_head(trk);
+    }
+
+    trkpts.insert(buf, wpt);
+    track_add_wpt(trk, wpt);
+  }
+}
+
+static void
+jtr_wr_init(const QString& fname)
+{
+  fout = gbfopen(fname, "wb", MYNAME);
+}
+
+static void
+jtr_wr_deinit()
+{
+  gbfclose(fout);
+}
+
+static void
+jtr_trkpt_disp_cb(const Waypoint* wpt)
+{
+  char* str, *tmp;
+  char scourse[6], sspeed[8];
+  QString sdate;
+  QString stime;
+
+  if (wpt->creation_time.isValid()) {
+    gpsbabel::DateTime dt = wpt->GetCreationTime().toUTC();
+
+    // round time to centiseconds.
+    int msec = dt.time().msec();
+    int csec = lround(msec/10.0);
+    dt = dt.addMSecs(csec*10-msec);
+    sdate = dt.toString(QStringLiteral("ddMMyy"));
+    stime = dt.toString(QStringLiteral("HHmmss.zzz"));
+    // toss milliseconds position which should now be zero.
+    //assert(stime.endsWith('0'));
+    stime.chop(1);
+    // suppress fractional seconds if they are zero.
+    stime = stime.replace(QLatin1String(".00"), QLatin1String(""));
+  }
+  if (WAYPT_HAS(wpt, speed) && (wpt->speed >= 0)) {
+    snprintf(sspeed, sizeof(sspeed), "%.1f", MPS_TO_KNOTS(wpt->speed));
+  } else {
+    sspeed[0] = 0;
+  }
+  if (WAYPT_HAS(wpt, course) && (wpt->course >= 0)) {
+    snprintf(scourse, sizeof(scourse), "%.1f", wpt->course);
+  } else {
+    scourse[0] = 0;
+  }
+
+  xasprintf(&str, "GEOTAG2,%s,%c,%09.4f,%c,%010.4f,%c,%s,%s,%s,,E,A",
+            CSTR(stime),
+            wpt->creation_time.isValid() ? 'A' : 'V',
+            fabs(degrees2ddmm(wpt->latitude)),
+            wpt->latitude < 0 ? 'S' : 'N',
+            fabs(degrees2ddmm(wpt->longitude)),
+            wpt->longitude < 0 ? 'W' : 'E',
+            sspeed,
+            scourse,
+            CSTR(sdate));
+
+  xasprintf(&tmp, "%s*%02X", str, NmeaFormat::nmea_cksum(str));
+  xfree(str);
+  str = tmp;
+
+  xasprintf(&tmp, "%s,,,E,,E*%02X\r", str, NmeaFormat::nmea_cksum(str));
+  xfree(str);
+  str = tmp;
+
+  gbfputs(str, fout);
+  xfree(str);
+}
+
+static void
+jtr_write()
+{
+  track_disp_all(nullptr, nullptr, jtr_trkpt_disp_cb);
+}
+
+/**************************************************************************/
+
+ff_vecs_t jtr_vecs = {
+  ff_type_file,
+  {
+    ff_cap_none,                       /* waypoints */
+    (ff_cap)(ff_cap_read | ff_cap_write),      /* tracks */
+    ff_cap_none                        /* routes */
+  },
+  jtr_rd_init,
+  jtr_wr_init,
+  jtr_rd_deinit,
+  jtr_wr_deinit,
+  jtr_read,
+  jtr_write,
+  nullptr,
+  &jtr_args,
+  CET_CHARSET_ASCII, 0                 /* ascii is the expected character set */
+  /* not fixed, can be changed through command line parameter */
+  , NULL_POS_OPS,
+  nullptr
+};
+
+/**************************************************************************/
diff --git a/deprecated/maggeo.cc b/deprecated/maggeo.cc
new file mode 100644 (file)
index 0000000..5ede9ef
--- /dev/null
@@ -0,0 +1,340 @@
+/*
+    Magellan ".gs" files as they appear on USB of Explorist 400,500,600.
+
+    Copyright (C) 2005, 2006, 2008 robertlipe+source@gpsbabel.org
+
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+
+ */
+
+#include "defs.h"
+#include "csv_util.h"
+#include "magellan.h"
+#include <QXmlStreamAttributes>
+#include <cmath>
+#include <cstdio>
+#include <cstdlib>
+
+#define MYNAME "maggeo"
+
+/* Turn this on (remove) after 5.2 becomes widespread. */
+#define FIRMWARE_DOES_88591 0
+
+static gbfile* maggeofile_in;
+static gbfile* maggeofile_out;
+static short_handle desc_handle = nullptr;
+
+static QDateTime maggeo_parsedate(char* dmy);
+
+static void
+maggeo_writemsg(const char* const buf)
+{
+  unsigned int osum = mag_checksum(buf);
+  gbfprintf(maggeofile_out, "$%s*%02X\r\n",buf, osum);
+}
+
+static void
+maggeo_rd_init(const QString& fname)
+{
+  maggeofile_in = gbfopen(fname, "rb", MYNAME);
+}
+
+static void
+maggeo_rd_deinit()
+{
+  gbfclose(maggeofile_in);
+}
+
+static void
+maggeo_wr_init(const QString& fname)
+{
+  if (waypt_count() > 200) {
+    fatal(MYNAME ": eXplorist does not support more than 200 waypoints in one .gs file.\nDecrease the number of waypoints sent.\n");
+  }
+  maggeofile_out = gbfopen(fname, "wb", MYNAME);
+  desc_handle = mkshort_new_handle();
+  setshort_length(desc_handle, 20);
+  setshort_badchars(desc_handle, "\"$,");
+}
+
+static void
+maggeo_wr_deinit()
+{
+  maggeo_writemsg("PMGNCMD,END");
+  mkshort_del_handle(&desc_handle);
+  gbfclose(maggeofile_out);
+}
+
+static void
+maggeo_read()
+{
+  char* buff;
+
+  while ((buff = gbfgetstr(maggeofile_in))) {
+    char* s = nullptr;
+
+    buff = lrtrim(buff);
+    if (*buff == '\0') {
+      continue;
+    }
+    if (strncmp(buff, "$PMGNGEO,", 9)) {
+      continue;
+    }
+
+    buff += 9; /* skip field no. 1 */
+    int fld = 1;
+
+    auto* wpt_tmp = new Waypoint;
+    geocache_data* gcdata = wpt_tmp->AllocGCData();
+
+    while ((s = csv_lineparse(buff, ",", "", fld++))) {
+      buff = nullptr;
+
+      s = lrtrim(s);
+      if (*s == '\0') {
+        continue;
+      }
+
+      switch (fld) {
+      case 2:
+        wpt_tmp->latitude = ddmm2degrees(atof(s));
+        break;
+      case 3:
+        if (s[0] == 'S') {
+          wpt_tmp->latitude = -wpt_tmp->latitude;
+        }
+        break;
+      case 4:
+        wpt_tmp->longitude = ddmm2degrees(atof(s));
+        break;
+      case 5:
+        if (s[0] == 'W') {
+          wpt_tmp->longitude = -wpt_tmp->longitude;
+        }
+        break;
+      case 6:
+        wpt_tmp->altitude = atof(s);
+        break;
+      case 7:
+        if (s[0] == 'F') {
+          wpt_tmp->altitude = METERS_TO_FEET(wpt_tmp->altitude);
+        }
+        break;
+      case 8:
+        wpt_tmp->shortname = s;
+        break;
+      case 9:
+        wpt_tmp->description = s;
+        break;
+      case 10:
+        gcdata->placer = s;
+        break;
+      case 11:
+        gcdata->hint = s;
+        break;
+      case 12: // cache type
+        if (strcmp(s, "Mystery Cache") == 0) {
+          gcdata->type = gt_surprise;
+        } else {
+          gcdata->type = gs_mktype(s);
+        }
+        break;
+      case 13:
+        wpt_tmp->creation_time = maggeo_parsedate(s);
+        break;
+      case 14: // last found date was ignored.  Implemented 2013-02-27.
+        gcdata->last_found = maggeo_parsedate(s);
+        break;
+      case 15:
+        gcdata->diff = 10 * atof(s);
+        break;
+      case 16:
+        gcdata->terr = 10 * atof(s);
+        break;
+      }
+    }
+    waypt_add(wpt_tmp);
+  }
+
+}
+
+static
+QString
+maggeo_fmtdate(const QDateTime& dt)
+{
+  QDate date = dt.date();
+  int y = date.year() - 1900;
+  int m = date.month();
+  int d = date.day();
+  int r = d * 100000 + m * 1000 + y;
+  return QString("%1").arg(r, 7, 10, QChar('0'));
+}
+
+/*
+ * The maggeo date format s DDMMYYY where "YYY" is the number
+ * of years since 1900.  This, of course, means anything in this
+ * century is three digits but anything from before 2000, we'd have
+ * two digit years.  This makes this easier to parse as strings.
+ */
+static QDateTime maggeo_parsedate(char* dmy)
+{
+  QString date(dmy);
+  int d = date.mid(0,2).toInt();
+  int m = date.mid(2,2).toInt();
+  int y = date.mid(4,3).toInt();
+#if (QT_VERSION < QT_VERSION_CHECK(5, 14, 0))
+  QDateTime r(QDate(y + 1900, m, d));
+#else
+  QDateTime r = QDate(y + 1900, m, d).startOfDay();
+#endif
+  return r;
+}
+
+/*
+ * Append an optional UTF string to buf, prepending a comma,
+ * cleansing it of NMEA-isms and decomposing to ASCII as we go.
+ */
+static
+void
+append(char* buf, const char* str)
+{
+  char* cleansed2;
+
+  strcat(buf, ",");
+
+  if (!str) {
+    return;
+  }
+
+  char* cleansed1 = xstrdup(str);
+#if FIRMWARE_DOES_88591
+  /* Actually, this function needs needs refactored... */
+  cleansed2 = xstrdup(cleansed1);
+#else
+  cleansed2 = xstrdup(m330_cleanse(cleansed1));
+#endif
+
+  strcat(buf, cleansed2);
+
+
+  xfree(cleansed1);
+  xfree(cleansed2);
+
+}
+
+static void
+maggeo_waypt_pr(const Waypoint* waypointp)
+{
+  char obuf[4096];
+  const char* ctype = nullptr;
+
+  double ilat = waypointp->latitude;
+  double ilon = waypointp->longitude;
+
+  double lon = fabs(ilon);
+  double lat = fabs(ilat);
+
+  int lon_deg = lon;
+  int lat_deg = lat;
+
+  lon = (lon - lon_deg) * 60.0;
+  lat = (lat - lat_deg) * 60.0;
+
+  lon = (lon_deg * 100.0 + lon);
+  lat = (lat_deg * 100.0 + lat);
+
+  /*
+   * For some reason, Magellan used exactly the GPX spellings of
+   * everything except this one...
+   */
+  if (waypointp->gc_data->type == gt_surprise) {
+    ctype = "Mystery Cache";
+  } else {
+    ctype = gs_get_cachetype(waypointp->gc_data->type);
+  }
+  QString placeddate = maggeo_fmtdate(waypointp->creation_time);
+  QString lfounddate = maggeo_fmtdate(waypointp->gc_data->last_found);
+  QString cname = mkshort(desc_handle,
+                  waypointp->notes.isEmpty() ? waypointp->description : waypointp->notes);
+  QString placer = waypointp->gc_data->placer;
+
+  /*
+   * As of this writing on 05/04, the firmware in the units will
+   * let you write fields of just about any width, but appears to
+   * only use the following:
+   * shortname - 8 chars
+   * cname - 20 chars (scrolls in some places, not others)
+   * placer - display limited by width
+   * hint - 50 chars
+   * cache type - appears to be parsed by f/w for icon matching.
+   *
+   *
+   */
+  snprintf(obuf, sizeof(obuf),
+           "PMGNGEO,%4.3f,%c,%08.3f,%c,%04.0f,F",
+           lat, ilat < 0 ? 'S' : 'N',
+           lon, ilon < 0 ? 'W' : 'E',
+           waypointp->altitude == unknown_alt ?
+           0 : waypointp->altitude);
+  append(obuf, CSTRc(waypointp->shortname));
+  append(obuf, CSTR(cname));
+  append(obuf, CSTR(placer));
+  append(obuf, CSTR(waypointp->gc_data->hint));
+  append(obuf, ctype);
+  append(obuf, placeddate.toUtf8());
+  append(obuf, lfounddate.toUtf8());
+
+  if (waypointp->gc_data->diff/10.0)
+    sprintf(obuf + strlen(obuf), ",%3.1f",
+            waypointp->gc_data->diff/10.0);
+  else {
+    strcat(obuf, ",");
+  }
+
+  if (waypointp->gc_data->terr/10.0)
+    sprintf(obuf + strlen(obuf), ",%3.1f",
+            waypointp->gc_data->terr/10.0);
+  else {
+    strcat(obuf, ",");
+  }
+
+  maggeo_writemsg(obuf);
+}
+
+static void
+maggeo_write()
+{
+  waypt_disp_all(maggeo_waypt_pr);
+}
+
+ff_vecs_t maggeo_vecs = {
+  ff_type_file,
+  { (ff_cap)(ff_cap_read | ff_cap_write), ff_cap_none, ff_cap_none },
+  maggeo_rd_init,
+  maggeo_wr_init,
+  maggeo_rd_deinit,
+  maggeo_wr_deinit,
+  maggeo_read,
+  maggeo_write,
+  nullptr,
+  nullptr,
+#if FIRMWARE_DOES_88591
+  CET_CHARSET_LATIN1, 0        /* CET-REVIEW */
+#else
+  CET_CHARSET_ASCII, 0 /* CET-REVIEW */
+#endif
+  , NULL_POS_OPS,
+  nullptr
+};
diff --git a/deprecated/mapsend.cc b/deprecated/mapsend.cc
new file mode 100644 (file)
index 0000000..ba26430
--- /dev/null
@@ -0,0 +1,545 @@
+/*
+    Access Magellan Mapsend files.
+
+    Copyright (C) 2002-2006 Robert Lipe, robertlipe+source@gpsbabel.org
+
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+ */
+
+#include <cmath>                // for lround
+#include <cstdio>               // for sprintf
+#include <cstdlib>              // for atoi
+#include <cstring>              // for strncpy
+#include <ctime>
+
+#include <QString>              // for QString
+#include <QTime>                // for QTime
+#include <QtGlobal>             // for Q_UNUSED
+
+#include "defs.h"
+#include "mapsend.h"
+#include "gbfile.h"             // for gbfputint32, gbfgetint32, gbfgetdbl, gbfputdbl, gbfgetpstr, gbfwrite, gbfputpstr, gbfputc, gbfread, gbfclose, gbfgetc, gbfgetflt, gbfopen, gbfputflt, gbfile, gbfgetuint32, gbfopen_le, gbsize_t
+#include "magellan.h"           // for mag_find_token_from_descr, mag_find_descr_from_token
+#include "src/core/datetime.h"  // for DateTime
+
+
+static gbfile* mapsend_file_in;
+static gbfile* mapsend_file_out;
+static short_handle mkshort_handle;
+static short_handle wpt_handle;
+
+static int route_wp_count;
+static int mapsend_infile_version;
+static int trk_version = 30;
+
+#define MYNAME "mapsend"
+
+static char* mapsend_opt_trkver = nullptr;
+#define MAPSEND_TRKVER_MIN 3
+#define MAPSEND_TRKVER_MAX 4
+
+static
+QVector<arglist_t> mapsend_args = {
+  {
+    "trkver", &mapsend_opt_trkver,
+    "MapSend version TRK file to generate (3,4)",
+    "4", ARGTYPE_INT, "3", "4", nullptr
+  },
+};
+
+static void
+mapsend_init_opts(const char isReading)        /* 1=read, 2=write */
+{
+  /* read & write options here */
+
+  if (isReading) {
+    /* reading-only options here */
+  } else {
+    /* writing-only options here */
+
+    // TRK MapSend version
+    int opt_trkver = atoi(mapsend_opt_trkver);
+    if ((opt_trkver < MAPSEND_TRKVER_MIN) || (opt_trkver > MAPSEND_TRKVER_MAX)) {
+      fatal(MYNAME ": Unsupported MapSend TRK version \"%s\"!\n", mapsend_opt_trkver);
+    }
+    trk_version = opt_trkver * 10;
+  }
+}
+
+static void
+mapsend_rd_init(const QString& fname)
+{
+  mapsend_init_opts(1);
+  mapsend_file_in = gbfopen_le(fname, "rb", MYNAME);
+}
+
+static void
+mapsend_rd_deinit()
+{
+  gbfclose(mapsend_file_in);
+}
+
+static void
+mapsend_wr_init(const QString& fname)
+{
+  mapsend_init_opts(0);
+  mapsend_file_out = gbfopen(fname, "wb", MYNAME);
+  mkshort_handle = mkshort_new_handle();
+
+  wpt_handle = mkshort_new_handle();
+  setshort_whitespace_ok(wpt_handle, 1);
+  setshort_length(wpt_handle, 8);
+
+  route_wp_count = 0;
+}
+
+static void
+mapsend_wr_deinit()
+{
+  gbfclose(mapsend_file_out);
+  mkshort_del_handle(&mkshort_handle);
+  mkshort_del_handle(&wpt_handle);
+}
+
+static void
+mapsend_wpt_read()
+{
+  char tbuf[256];
+  char wpt_icon;
+  Waypoint* wpt_tmp;
+
+  int wpt_count = gbfgetint32(mapsend_file_in);
+
+  while (wpt_count--) {
+    wpt_tmp = new Waypoint;
+
+    wpt_tmp->shortname = gbfgetpstr(mapsend_file_in);
+    wpt_tmp->description = gbfgetpstr(mapsend_file_in);
+
+    int wpt_number = gbfgetint32(mapsend_file_in);
+    (void) wpt_number; // hush warning.
+    wpt_icon = gbfgetc(mapsend_file_in);
+    char wpt_status = gbfgetc(mapsend_file_in);
+    (void) wpt_status; // hush warning.
+
+    wpt_tmp->altitude = gbfgetdbl(mapsend_file_in);
+    wpt_tmp->longitude = gbfgetdbl(mapsend_file_in);
+    wpt_tmp->latitude = -gbfgetdbl(mapsend_file_in);
+
+    if (wpt_icon < 26) {
+      sprintf(tbuf, "%c", wpt_icon + 'a');
+    } else {
+      sprintf(tbuf, "a%c", wpt_icon - 26 + 'a');
+    }
+    wpt_tmp->icon_descr = mag_find_descr_from_token(tbuf);
+
+    waypt_add(wpt_tmp);
+  }
+
+  /* now read the routes... */
+  int rte_count = gbfgetint32(mapsend_file_in);
+
+  while (rte_count--) {
+    auto* rte_head = new route_head;
+    route_add_head(rte_head);
+
+    /* route name */
+    rte_head->rte_name = gbfgetpstr(mapsend_file_in);
+
+    /* route # */
+    int rte_num = gbfgetint32(mapsend_file_in);
+    rte_head->rte_num = rte_num;
+
+    /* points this route */
+    wpt_count = gbfgetint32(mapsend_file_in);
+
+    while (wpt_count--) {
+      wpt_tmp = new Waypoint;
+
+      /* waypoint name */
+      wpt_tmp->shortname = gbfgetpstr(mapsend_file_in);
+
+      /* waypoint # */
+      int wpt_number = gbfgetint32(mapsend_file_in);
+      Q_UNUSED(wpt_number)
+      wpt_tmp->longitude = gbfgetdbl(mapsend_file_in);
+      wpt_tmp->latitude = -gbfgetdbl(mapsend_file_in);
+
+      gbfread(&wpt_icon, 1, sizeof(wpt_icon), mapsend_file_in);
+
+      if (wpt_icon < 26) {
+        sprintf(tbuf, "%c", wpt_icon + 'a');
+      } else {
+        sprintf(tbuf, "a%c", wpt_icon - 26 + 'a');
+      }
+      wpt_tmp->icon_descr = mag_find_descr_from_token(tbuf);
+
+      route_add_wpt(rte_head, wpt_tmp);
+    }
+  }
+}
+
+static void
+mapsend_track_read()
+{
+  auto* track_head = new route_head;
+  track_head->rte_name = gbfgetpstr(mapsend_file_in);
+  track_add_head(track_head);
+
+  unsigned int trk_count = gbfgetuint32(mapsend_file_in);
+
+  while (trk_count--) {
+    auto* wpt_tmp = new Waypoint;
+
+    wpt_tmp->longitude = gbfgetdbl(mapsend_file_in);
+    wpt_tmp->latitude = -gbfgetdbl(mapsend_file_in);
+
+    if (mapsend_infile_version < 36) { /* < version 4.0 */
+      wpt_tmp->altitude = gbfgetint32(mapsend_file_in);
+    } else {
+      wpt_tmp->altitude = gbfgetflt(mapsend_file_in);
+    }
+    if (wpt_tmp->altitude < unknown_alt + 1) {
+      wpt_tmp->altitude = unknown_alt;
+    }
+    time_t t = gbfgetint32(mapsend_file_in);
+    int32_t valid = gbfgetint32(mapsend_file_in);
+    Q_UNUSED(valid);
+
+    /* centiseconds only in >= version 3.0 */
+    unsigned char centisecs;
+    if (mapsend_infile_version >= 34) {
+      gbfread(&centisecs, 1, 1, mapsend_file_in);
+    } else {
+      centisecs = 0;
+    }
+    wpt_tmp->SetCreationTime(t, 10 * centisecs);
+
+    track_add_wpt(track_head, wpt_tmp);
+  }
+}
+
+static void
+mapsend_read()
+{
+  mapsend_hdr hdr;
+  char buf[3];
+
+  /*
+   * Because of the silly struct packing and the goofy variable-length
+   * strings, each member has to be read in one at a time.  Grrr.
+   */
+
+  gbsize_t len = gbfread(&hdr, 1, sizeof(hdr), mapsend_file_in);
+  is_fatal(len < sizeof(hdr), MYNAME ": No mapsend or empty file!");
+
+  int type = le_read16(&hdr.ms_type);
+  strncpy(buf, hdr.ms_version, 2);
+  buf[2] = '\0';
+
+  mapsend_infile_version = atoi(buf);
+
+  switch (type) {
+  case ms_type_wpt:
+    mapsend_wpt_read();
+    break;
+  case ms_type_track:
+    mapsend_track_read();
+    break;
+  case ms_type_log:
+    fatal(MYNAME ", GPS logs not supported.\n");
+  case ms_type_rgn:
+    fatal(MYNAME ", GPS regions not supported.\n");
+  default:
+    fatal(MYNAME ", unknown file type %d\n", type);
+  }
+}
+
+
+static void
+mapsend_waypt_pr(const Waypoint* waypointp)
+{
+  static int cnt = 0;
+  QString sn = global_opts.synthesize_shortnames ?
+                   mkshort_from_wpt(mkshort_handle, waypointp) :
+                   waypointp->shortname;
+
+  /*
+   * The format spec doesn't call out the character set of waypoint
+   * name and description.  Empirically, we can see that it's 8859-1,
+   * but if we create mapsend files containing those, Mapsend becomes
+   * grumpy uploading the resulting waypoints and being unable to deal
+   * with the resulting comm errors.
+   *
+   * Ironically, our own Magellan serial module strips the "naughty"
+   * characters, keeping it more in definition with their own serial
+   * spec. :-)
+   *
+   * So we just decompose the utf8 strings to ascii before stuffing
+   * them into the Mapsend file.
+   */
+
+
+  QString tmp1 = mkshort(wpt_handle, sn);
+  gbfputpstr(tmp1, mapsend_file_out);
+
+  // This is funny looking to ensure that no more than 30 bytes
+  // get written to the file.
+  unsigned int c = waypointp->description.length();
+  if (c > 30) {
+    c = 30;
+  }
+  gbfputc(c, mapsend_file_out);
+  gbfwrite(CSTR(waypointp->description), 1, c, mapsend_file_out);
+
+  /* #, icon, status */
+  gbfputint32(++cnt, mapsend_file_out);
+
+
+  QString iconp;
+  if (!waypointp->icon_descr.isNull()) {
+    iconp = mag_find_token_from_descr(waypointp->icon_descr);
+    if (1 == iconp.size()) {
+      c = iconp[0].toLatin1() - 'a';
+    } else {
+      c = iconp[1].toLatin1() - 'a' + 26;
+    }
+  } else  {
+    c = 0;
+  }
+  if (get_cache_icon(waypointp)) {
+    iconp = mag_find_token_from_descr(get_cache_icon(waypointp));
+    if (1 == iconp.size()) {
+      c = iconp[0].toLatin1() - 'a';
+    } else {
+      c = iconp[1].toLatin1() - 'a' + 26;
+    }
+  }
+
+  gbfputc(c, mapsend_file_out);
+  gbfputc(1, mapsend_file_out);
+
+  double falt = waypointp->altitude;
+  if (falt == unknown_alt) {
+    falt = 0;
+  }
+  gbfputdbl(falt, mapsend_file_out);
+
+  gbfputdbl(waypointp->longitude, mapsend_file_out);
+  gbfputdbl(-waypointp->latitude, mapsend_file_out);
+}
+
+static void
+mapsend_route_hdr(const route_head* rte)
+{
+  QString rname;
+  QString r = rte->rte_name;
+
+  /* route name -- mapsend really seems to want something here.. */
+  if (r.isEmpty()) {
+    rname = "Route";
+  } else {
+    rname = CSTRc(rte->rte_name);
+  }
+  gbfputpstr(rname, mapsend_file_out);
+
+  /* route # */
+  gbfputint32(rte->rte_num, mapsend_file_out);
+
+  /* # of waypoints to follow... */
+  gbfputint32(rte->rte_waypt_ct(), mapsend_file_out);
+}
+
+static void
+mapsend_route_disp(const Waypoint* waypointp)
+{
+  unsigned char c;
+
+  route_wp_count++;
+
+  /* waypoint name */
+  gbfputpstr(waypointp->shortname, mapsend_file_out);
+
+  /* waypoint number */
+  gbfputint32(route_wp_count, mapsend_file_out);
+
+  gbfputdbl(waypointp->longitude, mapsend_file_out);
+  gbfputdbl(-waypointp->latitude, mapsend_file_out);
+
+  if (!waypointp->icon_descr.isNull()) {
+    QString iconp = mag_find_token_from_descr(waypointp->icon_descr);
+    if (1 == iconp.size()) {
+      c = iconp[0].toLatin1() - 'a';
+    } else {
+      c = iconp[1].toLatin1() - 'a' + 26;
+    }
+  } else  {
+    c = 0;
+  }
+  gbfwrite(&c, 1, 1, mapsend_file_out);
+}
+
+static void mapsend_track_hdr(const route_head* trk)
+{
+  /*
+   * we write mapsend v3.0 tracks as mapsend v2.0 tracks get
+   * tremendously out of whack time/date wise.
+   */
+  const char* verstring = "30";
+  mapsend_hdr hdr = {13, {'4','D','5','3','3','3','3','4',' ','M','S'},
+    {'3','0'}, ms_type_track, {0, 0, 0}
+  };
+
+  switch (trk_version) {
+  case 20:
+    verstring = "30";
+    break;
+  case 30:
+    verstring = "34";
+    break;
+  case 40:
+    /* the signature seems to change with the versions, even though it
+     * shouldn't have according to the document. MapSend V4 doesn't
+     * like the old version.
+     */
+    hdr.ms_signature[7] = '6';
+    verstring = "36";
+    break;
+  default:
+    fatal("Unknown track version.\n");
+    break;
+  }
+
+  hdr.ms_version[0] = verstring[0];
+  hdr.ms_version[1] = verstring[1];
+
+  gbfwrite(&hdr, sizeof(hdr), 1, mapsend_file_out);
+  QString tname = trk->rte_name.isEmpty() ? "Track" : trk->rte_name;
+  gbfputpstr(tname, mapsend_file_out);
+
+  /* total nodes (waypoints) this track */
+  int i = trk->rte_waypt_ct();
+
+  gbfputint32(i, mapsend_file_out);
+
+}
+
+static void mapsend_track_disp(const Waypoint* wpt)
+{
+  unsigned char c;
+  static int last_time;
+
+  /*
+   * Firmware Ver 4.06 (at least) has a defect when it's set for .01km
+   * tracking that will sometimes result in timestamps in the track
+   * going BACKWARDS.   When mapsend sees this, it (stupidly) advances
+   * the date by one, ignoring the date on the TRK lines.   This looks
+   * for time travel and just uses the previous time - it's better to
+   * be thought to be standing still than to be time-travelling!
+   *
+   * This is rumoured (but yet unconfirmed) to be fixed in f/w 5.12.
+   */
+  int32_t t = wpt->GetCreationTime().toTime_t();
+  if (t < last_time)  {
+    t = last_time;
+  }
+
+  /* x = longitude */
+  gbfputdbl(wpt->longitude, mapsend_file_out);
+
+  /* x = latitude */
+  gbfputdbl(-wpt->latitude, mapsend_file_out);
+
+  /* altitude
+   * in V4.0+ this field is a float, it was previously an int
+   */
+  if (trk_version < 40) {
+    gbfputint32((int) wpt->altitude, mapsend_file_out);
+  } else {
+    gbfputflt((float) wpt->altitude, mapsend_file_out);
+  }
+
+  /* time */
+  gbfputint32(t, mapsend_file_out);
+  last_time = t;
+
+  /* validity */
+  gbfputint32(1, mapsend_file_out);
+
+  /* 0 centiseconds */
+  if (trk_version >= 30) {
+    c = lround(wpt->GetCreationTime().time().msec() / 10.0);
+    gbfwrite(&c, 1, 1, mapsend_file_out);
+  }
+}
+
+static void
+mapsend_track_write()
+{
+  track_disp_all(mapsend_track_hdr, nullptr, mapsend_track_disp);
+}
+
+static void
+mapsend_wpt_write()
+{
+  mapsend_hdr hdr = {13, {'4','D','5','3','3','3','3','0',' ','M','S'},
+    {'3', '0'}, ms_type_wpt, {0, 0, 0}
+  };
+  int wpt_count = waypt_count();
+
+  if (global_opts.objective == trkdata) {
+    mapsend_track_write();
+  } else {
+    gbfwrite(&hdr, sizeof(hdr), 1, mapsend_file_out);
+
+    if (global_opts.objective == wptdata) {
+      gbfputint32(wpt_count, mapsend_file_out);
+      waypt_disp_all(mapsend_waypt_pr);
+    } else if (global_opts.objective == rtedata) {
+
+      /* # of points - all routes */
+      gbfputint32(route_waypt_count(), mapsend_file_out);
+
+      /* write points - all routes */
+      route_disp_all(nullptr, nullptr, mapsend_waypt_pr);
+    }
+
+    int n = route_count();
+
+    gbfputint32(n, mapsend_file_out);
+
+    if (n) {
+      route_disp_all(mapsend_route_hdr, nullptr, mapsend_route_disp);
+    }
+  }
+}
+
+
+
+ff_vecs_t mapsend_vecs = {
+  ff_type_file,
+  FF_CAP_RW_ALL,
+  mapsend_rd_init,
+  mapsend_wr_init,
+  mapsend_rd_deinit,
+  mapsend_wr_deinit,
+  mapsend_read,
+  mapsend_wpt_write,
+  nullptr,
+  &mapsend_args,
+  CET_CHARSET_ASCII, 0 /* CET-REVIEW */
+  , NULL_POS_OPS,
+  nullptr
+};
diff --git a/deprecated/mapsend.h b/deprecated/mapsend.h
new file mode 100644 (file)
index 0000000..6cd8ff2
--- /dev/null
@@ -0,0 +1,44 @@
+/*
+    Access to MapSend files.
+
+    Copyright (C) 2002 Robert Lipe, robertlipe@usa.net
+
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+
+ *
+ * Information from:
+ *  Mapsend File Format Description Revision 1.1, March 6, 2002 from Thales.
+ *
+ * Note this file format was clearly NOT designed for cross-architecture
+ * portability.  In fact, because of the pascal nature of the 'string'
+ * data type described in that document, it's impractical to describe
+ * a 'struct waypoint' in C.
+ *
+ */
+
+struct mapsend_hdr {
+  char ms_length;
+  char ms_signature[11];
+  char ms_version[2];
+  char ms_type;
+  char _ms_type[3];
+};
+
+enum ms_type {
+  ms_type_rgn = 0,
+  ms_type_wpt = 1,
+  ms_type_track = 2,
+  ms_type_log = 3
+};
diff --git a/deprecated/nmn4.cc b/deprecated/nmn4.cc
new file mode 100644 (file)
index 0000000..f083e17
--- /dev/null
@@ -0,0 +1,286 @@
+/*
+
+   Support for Navigon Mobile Navigator .rte files.
+
+   Copyright (C) 2005 Olaf Klein, o.b.klein@gpsbabel.org
+
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 2 of the License, or
+   (at your option) any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+*/
+
+/*
+    line structure, items delimited by '|'
+
+-|-|17|-|ZIP-Code|City|ZIP-Code2|Street|No.|-|-|longitude|latitude|-|-| + 0D0A
+
+*/
+
+#include "defs.h"
+#include "cet_util.h"
+#include "csv_util.h"
+#include <cctype>
+#include <cstdarg>
+#include <cstdio>
+#include <cstdlib>
+
+static gbfile* fin, *fout;
+static int curr_rte_num, target_rte_num;
+
+#define MYNAME "navigon"
+
+static char* index_opt;
+
+static
+QVector<arglist_t> nmn4_args = {
+  {"index", &index_opt, "Index of route to write (if more than one in source)", nullptr, ARGTYPE_INT, "1", nullptr , nullptr},
+};
+
+
+static void
+nmn4_check_line(char* line)
+{
+  char* c = line;
+  int i = 0;
+  while ((c = strchr(c, '|'))) {
+    c++;
+    i++;
+  }
+  is_fatal((i != 15),
+           MYNAME ": Invalid or unknown structure!");
+}
+
+static void
+nmn4_read_data()
+{
+  char* buff;
+  int line = 0;
+
+  QString zip2, city, street, number;
+
+  auto* route = new route_head;
+  route_add_head(route);
+
+  while ((buff = gbfgetstr(fin))) {
+    if ((line++ == 0) && fin->unicode) {
+      cet_convert_init(CET_CHARSET_UTF8, 1);
+    }
+    char* str = buff = lrtrim(buff);
+    if (*buff == '\0') {
+      continue;
+    }
+
+    nmn4_check_line(buff);
+
+    /* for a quiet compiler */
+    QString zip1 = zip2 = city = street = number = QString();
+
+    auto* wpt = new Waypoint;
+
+    int column = -1;
+    QString c = csv_lineparse(str, "|", "", column++);
+    while (!c.isNull()) {
+      switch (column) {
+      case  0: /* "-" */       /* unknown fields for the moment */
+      case  1: /* "-" */
+      case  2: /* "-" */
+      case  3: /* "-" */
+      case  9: /* "-" */
+      case 10: /* "-" */
+      case 13: /* "-" */
+      case 14: /* "-" */
+      case 15: /* "" */
+        break;
+
+      case  4:                                 /* ZIP Code */
+        if (c[0] != '-') {
+          zip1 = c;
+        }
+        break;
+
+      case  5:                                 /* City */
+        if (c[0] != '-') {
+          city = c;
+        }
+        break;
+
+      case  6:                                 /* ZIP Code -2- */
+        if (c[0] != '-') {
+          zip2 = c;
+        }
+        break;
+
+      case  7:                                 /* Street */
+        if (c[0] != '-') {
+          street = c;
+        }
+        break;
+
+      case  8:                                 /* Number */
+        if (c[0] != '-') {
+          number = c;
+        }
+
+        /*
+                  This is our final index
+           All stuff for generating names or comments
+           is hold locally.
+
+           We don't have fields for street, city or zip-code.
+           Instead we construct a description from that.
+        */
+
+        if (zip1 == zip2) {
+          zip2 = QString();
+        }
+        if (!city.isEmpty()) {
+          /*
+          if any field following city has a value, add a comma to city
+          */
+          if (!street.isEmpty() || !number.isEmpty() || !zip2.isEmpty()) {
+            city += ",";
+          }
+        }
+
+        /* concatenates all fields to one string and release */
+        wpt->description = zip1.trimmed() + " " +
+          city.trimmed() + " " +
+          street.trimmed() + " " +
+          number.trimmed() + " " +
+          zip2.trimmed();
+
+        break;
+
+      case 11:                                 /* longitude */
+        wpt->longitude = c.toDouble();
+        break;
+
+      case 12:                                 /* latitude */
+        wpt->latitude = c.toDouble();
+        break;
+
+      }
+      c = QString::fromLatin1(csv_lineparse(nullptr, "|", "", column++));
+    }
+    route_add_wpt(route, wpt);
+  }
+}
+
+static void
+nmn4_route_hdr(const route_head*)
+{
+  curr_rte_num++;
+}
+
+static void
+nmn4_write_waypt(const Waypoint* wpt)
+{
+  char city[128], street[128], zipc[32], number[32];
+
+  if (curr_rte_num != target_rte_num) {
+    return;
+  }
+
+  strncpy(city, "-", sizeof(city));
+  strncpy(street, "-", sizeof(street));
+  strncpy(zipc, "-", sizeof(zipc));
+  strncpy(number, "-", sizeof(number));
+
+  /*
+     Population of specific data used by Navigon may come in the
+     future or it may be impossible. We currently output only the
+     coordinates in the output, but this is sufficient for Navigon.
+
+     The coordinates are the only item we are about guaranteed to have
+     when converting to any from any format, so we leave the other
+     fields unpopulated.  So i have to pay Navigon a compliment for
+     implementing a simple data exchange.
+   */
+
+  gbfprintf(fout, "-|-|-|-|%s|%s|%s|%s|%s|-|-|%.5f|%.5f|-|-|\r\n",
+            zipc, city, zipc, street, number,
+            wpt->longitude, wpt->latitude);
+}
+
+static void
+nmn4_write_data()
+{
+
+  target_rte_num = 1;
+
+  if (index_opt != nullptr) {
+    target_rte_num = atoi(index_opt);
+    is_fatal(((target_rte_num > (int) route_count()) || (target_rte_num < 1)),
+             MYNAME ": invalid route number %d (1..%d))!\n", target_rte_num, route_count());
+  }
+
+  curr_rte_num = 0;
+  route_disp_all(nmn4_route_hdr, nullptr, nmn4_write_waypt);
+}
+
+
+/* %%% global callbacks %%% */
+
+static void
+nmn4_rd_init(const QString& fname)
+{
+  fin = gbfopen(fname, "rb", MYNAME);
+}
+
+static void
+nmn4_rd_deinit()
+{
+  gbfclose(fin);
+}
+
+static void
+nmn4_read()
+{
+  nmn4_read_data();
+}
+
+static void
+nmn4_wr_init(const QString& fname)
+{
+  fout = gbfopen(fname, "wb", MYNAME);
+}
+
+static void
+nmn4_wr_deinit()
+{
+  gbfclose(fout);
+}
+
+static void
+nmn4_write()
+{
+  nmn4_write_data();
+}
+
+/* --------------------------------------------------------------------------- */
+
+ff_vecs_t nmn4_vecs = {
+  ff_type_file,
+  { ff_cap_none, ff_cap_none, (ff_cap)(ff_cap_read | ff_cap_write)},
+  nmn4_rd_init,
+  nmn4_wr_init,
+  nmn4_rd_deinit,
+  nmn4_wr_deinit,
+  nmn4_read,
+  nmn4_write,
+  nullptr,
+  &nmn4_args,
+  CET_CHARSET_MS_ANSI, 1       /* CET-REVIEW */
+  , NULL_POS_OPS,
+  nullptr
+};
diff --git a/deprecated/pcx.cc b/deprecated/pcx.cc
new file mode 100644 (file)
index 0000000..7a50015
--- /dev/null
@@ -0,0 +1,423 @@
+/*
+    Access to Garmin PCX5 files.
+    Format described in: http://www.garmin.com/manuals/PCX5_OwnersManual.pdf
+
+    Copyright (C) 2002-2017 Robert Lipe, robertlipe+source@gpsbabel.org
+
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+*/
+
+#include <cmath>                      // for fabs
+#include <cstdlib>                    // for atoi
+#include <cstring>                    // for strstr, strncmp
+
+#include <QChar>                      // for operator==, QChar
+#include <QDate>                      // for QDate
+#include <QDateTime>                  // for QDateTime
+#include <QList>                      // for QList
+#include <QRegularExpression>         // for QRegularExpression
+#include <QString>                    // for QString, QString::SectionSkipEmpty
+#include <QStringList>                // for QStringList
+#include <QTime>                      // for QTime
+#include <QVector>                    // for QVector
+#include <Qt>                         // for CaseInsensitive, UTC
+
+#include "defs.h"
+#include "cet_util.h"                 // for cet_convert_init
+#include "csv_util.h"                 // for human_to_dec
+#include "garmin_tables.h"            // for gt_find_icon_number_from_desc, PCX, gt_find_desc_from_icon_number
+#include "gbfile.h"                   // for gbfprintf, gbfclose, gbfopen, gbfgetstr, gbfile
+#include "src/core/datetime.h"        // for DateTime
+
+
+static gbfile* file_in, *file_out;
+static short_handle mkshort_handle;
+static short_handle mkshort_handle2; /* for track and route names */
+static char* deficon = nullptr;
+static char* cartoexploreur;
+static int read_as_degrees;
+static int read_gpsu;
+static int route_ctr;
+static int comment_col = 60; /* This has a default */
+static int sym_col;
+static int lat_col;
+static int lon_col;
+
+#define MYNAME "PCX"
+
+static QVector<arglist_t> pcx_args = {{"deficon", &deficon, "Default icon name",
+                                "Waypoint", ARGTYPE_STRING, ARG_NOMINMAX, nullptr},
+                               {"cartoexploreur", &cartoexploreur,
+                                "Write tracks compatible with Carto Exploreur",
+                                nullptr, ARGTYPE_BOOL, ARG_NOMINMAX, nullptr},
+                               };
+
+static void rd_init(const QString& fname) {
+  file_in = gbfopen(fname, "rb", MYNAME);
+}
+
+static void rd_deinit() { gbfclose(file_in); }
+
+static void wr_init(const QString& fname) {
+  file_out = gbfopen(fname, "w", MYNAME);
+  mkshort_handle = mkshort_new_handle();
+  mkshort_handle2 = mkshort_new_handle();
+}
+
+static void wr_deinit() {
+  gbfclose(file_out);
+  mkshort_del_handle(&mkshort_handle);
+  mkshort_del_handle(&mkshort_handle2);
+}
+
+// Find the first token in string |in| when there may be leading whitespace.
+// These files have weird mixtures of spaces and tabs.
+static QString FirstTokenAt(const QString& in, int index) {
+  static const QRegularExpression sep(QRegularExpression(R"(\s+)"));
+  return in.mid(index, -1).section(sep, 0, 0, QString::SectionSkipEmpty);
+}
+
+// Centralize Date/Time parsing between Waypoint and Trackpoint readers.
+static void  SetWaypointTime(Waypoint* wpt, const QString& date, const QString& time) {
+  QDate qdate = QDate::fromString(date, "dd-MMM-yy");
+  QTime qtime = QTime::fromString(time, "hh:mm:ss");
+  if (qdate.isValid() && qtime.isValid()) {
+    wpt->SetCreationTime(QDateTime(qdate, qtime, Qt::UTC));
+  }
+}
+
+// Loop and parse all the lines of the file. This is complicated by the
+// variety of programs in the wild that loosely use this format and that
+// there are two distinct versions of PCX.
+// In the simplest form, white spaces are disallowed in the individual
+// fields and everything is just whitespace separated and the fields have
+// a fixed order.
+// The presence of an "F" or "H" record changes the precedence of parse
+// to allow fields in any order and length, based on their position in
+// these header lines. Oddly, we've seen only 'W' records take this form.
+
+static void data_read() {
+  int symnum;
+  Waypoint* wpt_tmp;
+  char* buff;
+  route_head* track = nullptr;
+  route_head* route = nullptr;
+  int line_number = 0;
+
+  read_as_degrees = 0;
+  int points = 0;
+  const QRegularExpression sep(QRegularExpression(R"(\s+)"));
+
+  // Each line is both |buff| as a C string and |line| as a QString.
+  while ((buff = gbfgetstr(file_in))) {
+    const QString line = QString(buff).trimmed();
+    char* ibuf = lrtrim(buff);
+    if ((line_number++ == 0) && file_in->unicode) {
+      cet_convert_init(CET_CHARSET_UTF8, 1);
+    }
+
+    switch (ibuf[0]) {
+      case 'W': {
+        const QStringList tokens = line.split(sep);
+        if (tokens.size() < 6) {
+          fatal(MYNAME
+                ": Unable to parse waypoint, not all required columns "
+                "contained\n");
+        }
+        // tokens[0] = "W".
+        QString name = tokens[1];
+        QString tbuf = tokens[2];
+        QString nbuf = tokens[3];
+        QString date = tokens[4];
+        QString time = tokens[5];
+        long alt = unknown_alt;
+        if (tokens.size() == 7) {
+          alt = tokens[6].toDouble();
+        }
+
+        QString desc;
+        if (comment_col > 0) {
+          desc = line.mid(comment_col, -1);
+        }
+
+        symnum = 18;
+        if (sym_col > 0) {
+          symnum = atoi(&ibuf[sym_col]);
+        }
+
+        // If we have explicit columns for lat and lon,
+        // copy those entire words (warning: no spaces)
+        // into the respective coord buffers.
+        if (lat_col > 0) {
+          tbuf = FirstTokenAt(line, lat_col);
+        }
+        if (lon_col > 0) {
+          nbuf = FirstTokenAt(line, lon_col);
+        }
+
+        wpt_tmp = new Waypoint;
+        wpt_tmp->altitude = alt;
+        SetWaypointTime(wpt_tmp, date, time);
+        wpt_tmp->shortname = name.trimmed();
+        wpt_tmp->description = desc.trimmed();
+        wpt_tmp->icon_descr = gt_find_desc_from_icon_number(symnum, PCX);
+
+        double lat = 0;
+        double lon = 0;
+        if (read_as_degrees || read_gpsu) {
+          human_to_dec(tbuf, &lat, &lon, 1);
+          human_to_dec(nbuf, &lat, &lon, 2);
+          wpt_tmp->longitude = lon;
+          wpt_tmp->latitude = lat;
+        } else {
+          lat = tbuf.mid(1, -1).toDouble();
+          lon = nbuf.mid(1, -1).toDouble();
+          if (tbuf[0] == 'S') {
+            lat = -lat;
+          }
+          if (nbuf[0] == 'W') {
+            lon = -lon;
+          }
+          wpt_tmp->longitude = ddmm2degrees(lon);
+          wpt_tmp->latitude = ddmm2degrees(lat);
+        }
+
+        if (route != nullptr) {
+          route_add_wpt(route, new Waypoint(*wpt_tmp));
+        }
+        waypt_add(wpt_tmp);
+        points++;
+        break;
+      }
+      case 'H':
+        /* Garmap2 has headers
+        "H(2 spaces)LATITUDE(some spaces)LONGITUDE(etc... followed by);track
+          everything else is
+          H(2 chars)TN(trackname\0)
+          */
+        if (points > 0) {
+          track = nullptr;
+          points = 0;
+        }
+        if (track == nullptr) {
+          if (ibuf[3] == 'L' && ibuf[4] == 'A') {
+            track = new route_head;
+            track->rte_name = "track";
+            track_add_head(track);
+          } else if (ibuf[3] == 'T' && ibuf[4] == 'N') {
+            track = new route_head;
+            track->rte_name = &ibuf[6];
+            track_add_head(track);
+          }
+        }
+        break;
+      case 'R':
+        route = new route_head;
+        route->rte_name = QString(&ibuf[1]).trimmed();
+        route_add_head(route);
+        break;
+      case 'T': {
+        const QStringList tokens = line.split(sep);
+        if (tokens.size() < 6) {
+          fatal(MYNAME
+                ": Unable to parse trackpoint, not all required columns "
+                "contained\n");
+        }
+
+        // tokens[0] = "W".
+        QString tbuf = tokens[1];
+        QString nbuf = tokens[2];
+        QString date = tokens[3];
+        QString time = tokens[4];
+        double alt = tokens[5].toDouble();
+
+        wpt_tmp = new Waypoint;
+        SetWaypointTime(wpt_tmp, date, time);
+
+        double lat, lon;
+        if (read_as_degrees) {
+          human_to_dec(tbuf, &lat, &lon, 1);
+          human_to_dec(nbuf, &lat, &lon, 2);
+
+          wpt_tmp->longitude = lon;
+          wpt_tmp->latitude = lat;
+        } else {
+          lat = tbuf.mid(1, -1).toDouble();
+          lon = nbuf.mid(1, -1).toDouble();
+          if (tbuf[0] == 'S') {
+            lat = -lat;
+          }
+          if (nbuf[0] == 'W') {
+            lon = -lon;
+          }
+          wpt_tmp->longitude = ddmm2degrees(lon);
+          wpt_tmp->latitude = ddmm2degrees(lat);
+        }
+        wpt_tmp->altitude = alt;
+
+        /* Did we get a track point before a track header? */
+        if (track == nullptr) {
+          track = new route_head;
+          track->rte_name = "Default";
+          track_add_head(track);
+        }
+        track_add_wpt(track, wpt_tmp);
+        points++;
+        break;
+      }
+      case 'U':
+        read_as_degrees = !strncmp("LAT LON DEG", ibuf + 3, 11);
+        if (strstr(ibuf, "UTM")) {
+          fatal(MYNAME ": UTM is not supported.\n");
+        }
+        break;
+      // GPSU is apparently PCX but with a different definition
+      // of "LAT LON DM" - unlike the other, it actually IS decimal
+      // minutes.
+      case 'I':
+        read_gpsu = !(strstr(ibuf, "GPSU") == nullptr);
+        break;
+      // This is a format specifier.  Use this line to figure out
+      // where our other columns start.
+      case 'F': {
+        comment_col = line.indexOf("comment", 0, Qt::CaseInsensitive);
+        sym_col = line.indexOf("symbol", 0, Qt::CaseInsensitive);
+        lat_col = line.indexOf("latitude", 0, Qt::CaseInsensitive);
+        lon_col = line.indexOf("longitude", 0, Qt::CaseInsensitive);
+      } break;
+      default:
+        break;
+    }
+  }
+}
+
+static void gpsutil_disp(const Waypoint* wpt) {
+  int icon_token = 0;
+
+  double lon = degrees2ddmm(wpt->longitude);
+  double lat = degrees2ddmm(wpt->latitude);
+
+  QDateTime dt = wpt->GetCreationTime().toUTC();
+  const QString ds = dt.toString("dd-MMM-yy hh:mm:ss").toUpper();
+
+  if (deficon) {
+    icon_token = atoi(deficon);
+  } else {
+    icon_token = gt_find_icon_number_from_desc(wpt->icon_descr, PCX);
+    if (get_cache_icon(wpt)) {
+      icon_token = gt_find_icon_number_from_desc(get_cache_icon(wpt), PCX);
+    }
+  }
+
+  gbfprintf(file_out, "W  %-6.6s %c%08.5f %c%011.5f %s %5.f %-40.40s %5e  %d\n",
+            global_opts.synthesize_shortnames
+                ? CSTRc(mkshort_from_wpt(mkshort_handle, wpt))
+                : CSTRc(wpt->shortname),
+            lat < 0.0 ? 'S' : 'N', fabs(lat), lon < 0.0 ? 'W' : 'E', fabs(lon),
+            CSTR(ds), (wpt->altitude == unknown_alt) ? -9999 : wpt->altitude,
+            (wpt->description != nullptr) ? CSTRc(wpt->description) : "", 0.0,
+            icon_token);
+}
+
+static void pcx_track_hdr(const route_head* trk) {
+  route_ctr++;
+
+  QString default_name = QString::asprintf("Trk%03d", route_ctr);
+  QString name =
+      mkshort(mkshort_handle2,
+              trk->rte_name.isEmpty() ? CSTR(default_name) : trk->rte_name);
+  /* Carto Exploreur (popular in France) chokes on trackname headers,
+   * so provide option to suppress these.
+   */
+  if (!cartoexploreur) {
+    gbfprintf(file_out, "\n\nH  TN %s\n", CSTR(name));
+  }
+  gbfprintf(file_out,
+            "H  LATITUDE    LONGITUDE    DATE      TIME     ALT  ;track\n");
+}
+
+static void pcx_route_hdr(const route_head* rte) {
+  route_ctr++;
+  QString default_name = QString::asprintf("Rte%03d", route_ctr);
+
+  QString name = mkshort(
+      mkshort_handle2, rte->rte_name.isEmpty() ? default_name : rte->rte_name);
+
+  /* see pcx_track_hdr */
+  if (!cartoexploreur) {
+    gbfprintf(file_out, "\n\nR  %s\n", CSTR(name));
+  }
+  gbfprintf(file_out,
+            "\n"
+            "H  IDNT   LATITUDE    LONGITUDE    DATE      TIME     ALT   "
+            "DESCRIPTION                              PROXIMITY     SYMBOL "
+            ";waypts\n");
+}
+
+static void pcx_track_disp(const Waypoint* wpt) {
+  double lon = degrees2ddmm(wpt->longitude);
+  double lat = degrees2ddmm(wpt->latitude);
+
+  QDateTime dt = wpt->GetCreationTime().toUTC();
+  const QString ds = dt.toString("dd-MMM-yy hh:mm:ss").toUpper();
+
+  gbfprintf(file_out, "T  %c%08.5f %c%011.5f %s %.f\n", lat < 0.0 ? 'S' : 'N',
+            fabs(lat), lon < 0.0 ? 'W' : 'E', fabs(lon), CSTR(ds),
+            wpt->altitude);
+}
+
+static void data_write() {
+  gbfprintf(file_out,
+            "H  SOFTWARE NAME & VERSION\n"
+            "I  PCX5 2.09\n"
+            "\n"
+            "H  R DATUM                IDX DA            DF            DX      "
+            "      DY            DZ\n"
+            "M  G WGS 84               121 +0.000000e+00 +0.000000e+00 "
+            "+0.000000e+00 +0.000000e+00 +0.000000e+00\n"
+            "\n"
+            "H  COORDINATE SYSTEM\n"
+            "U  LAT LON DM\n");
+
+  setshort_length(mkshort_handle, 6);
+
+  setshort_length(mkshort_handle2, 20); /* for track and route names */
+  setshort_whitespace_ok(mkshort_handle2, 0);
+  setshort_mustuniq(mkshort_handle2, 0);
+
+  if (global_opts.objective == wptdata) {
+    gbfprintf(file_out,
+              "\n"
+              "H  IDNT   LATITUDE    LONGITUDE    DATE      TIME     ALT   "
+              "DESCRIPTION                              PROXIMITY     SYMBOL "
+              ";waypts\n");
+
+    waypt_disp_all(gpsutil_disp);
+  } else if (global_opts.objective == trkdata) {
+    route_ctr = 0;
+    track_disp_all(pcx_track_hdr, nullptr, pcx_track_disp);
+  } else if (global_opts.objective == rtedata) {
+    route_ctr = 0;
+    route_disp_all(pcx_route_hdr, nullptr, gpsutil_disp);
+  }
+}
+
+ff_vecs_t pcx_vecs = {
+    ff_type_file,      FF_CAP_RW_ALL, rd_init,    wr_init, rd_deinit,
+    wr_deinit,         data_read,     data_write, nullptr,    &pcx_args,
+    CET_CHARSET_ASCII, 1 /* CET-REVIEW */
+  , NULL_POS_OPS,
+  nullptr
+};
diff --git a/deprecated/pocketfms_bc.cc b/deprecated/pocketfms_bc.cc
new file mode 100644 (file)
index 0000000..680ebc2
--- /dev/null
@@ -0,0 +1,190 @@
+/*
+    Read and write PocketFMS files.
+
+       Copyright (C) 2009 Tobias Kretschmar, tobias.kretschmar@gmx.de
+
+       This program is free software; you can redistribute it and/or modify
+       it under the terms of the GNU General Public License as published by
+       the Free Software Foundation; either version 2 of the License, or
+       (at your option) any later version.
+
+       This program is distributed in the hope that it will be useful,
+       but WITHOUT ANY WARRANTY; without even the implied warranty of
+       MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+       GNU General Public License for more details.
+
+       You should have received a copy of the GNU General Public License
+       along with this program; if not, write to the Free Software
+       Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+
+ */
+
+#include "defs.h"
+
+#define MYNAME                 "PocketFMS Breadcrumbs"
+
+static char header_id[] = "BRC";
+
+struct breadcrumb {
+  // header
+  char         id[4];            // 0x42 0x52 0x43 0x00 <=> "BRC"
+  uint16_t     version;        // 0x0100
+  uint16_t     reserve1;       // 0x0000
+  // data
+  float                latitude;
+  float                longitude;
+  float                altitude;       // meter
+  float                speed;          // m/s
+  float                course;         // degrees
+  float                magvar;         // degrees
+  float                separation;     // meter
+  float                ehpe;           // estimated horizontal position error
+  float                evpe;           // estimated vertical position error
+  float                espe;           // estimated speed position error
+  uint16_t     fix;            // 1..none, 2..2D, 3..3D, 4..dgps, 5pps
+  uint16_t     year;           // 1999..2999
+  uint16_t     month;          // 1..12
+  uint16_t     day;            // 0..31
+  uint16_t     hour;           // 0.23
+  uint16_t     minute;         // 0..59
+  uint16_t     second;         // 0..59
+  uint16_t     reserve2;       // 0x0000
+};
+
+static gbfile* file_in, *file_out;
+
+static void
+rd_init(const QString& fname)
+{
+  file_in = gbfopen_le(fname, "rb", MYNAME);
+}
+
+static void
+rd_deinit()
+{
+  gbfclose(file_in);
+}
+
+static void
+wr_init(const QString& fname)
+{
+  file_out = gbfopen_le(fname, "wb", MYNAME);
+}
+
+static void
+wr_deinit()
+{
+  gbfclose(file_out);
+}
+
+static void
+read_tracks()
+{
+  breadcrumb bc;
+  auto* trk_head = new route_head;
+  trk_head->rte_num = 1;
+  trk_head->rte_name = "PocketFMS";
+  trk_head->rte_desc = "Breadcrumb";
+  trk_head->rte_urls.AddUrlLink(UrlLink("www.pocketfms.com"));
+  track_add_head(trk_head);
+
+  while (1 == gbfread(&bc, sizeof(bc), 1, file_in)) {
+    struct tm tm;
+
+    if (strcmp(bc.id, header_id) != 0) {
+      fatal(MYNAME ": invalid breadcrumb header in input file.\n");
+    }
+
+    memset(&tm, 0, sizeof(tm));
+    tm.tm_year = le_readu16(&bc.year)-1900;
+    tm.tm_mon = le_readu16(&bc.month)-1;
+    tm.tm_mday = le_readu16(&bc.day);
+    tm.tm_hour = le_readu16(&bc.hour);
+    tm.tm_min = le_readu16(&bc.minute);
+    tm.tm_sec = le_readu16(&bc.second);
+
+    auto* wpt = new Waypoint;
+    wpt->latitude = le_read_float(&bc.latitude);
+    wpt->longitude = le_read_float(&bc.longitude);
+    wpt->altitude = FEET_TO_METERS(le_read_float(&bc.altitude));
+    wpt->SetCreationTime(mkgmtime(&tm));
+    wpt->hdop = le_read_float(&bc.ehpe);
+    wpt->vdop = le_read_float(&bc.evpe);
+    wpt->pdop = le_read_float(&bc.espe);
+    wpt->course = le_read_float(&bc.course);
+    wpt->speed = le_read_float(&bc.speed);
+    wpt->fix = (fix_type)(le_readu16(&bc.fix) - 1);
+
+    track_add_wpt(trk_head, wpt);
+  }
+}
+
+static void
+pocketfms_waypt_disp(const Waypoint* wpt)
+{
+  breadcrumb bc;
+
+  memset(&bc, 0, sizeof(bc));
+  const time_t tt = wpt->GetCreationTime().toTime_t();
+  struct tm* tm = localtime(&tt);
+  if (wpt->creation_time.isValid()) {
+    // It seems odd to reread waypoint time here, but this whole format
+    // is likely short-lived.
+    const time_t tt2 = wpt->GetCreationTime().toTime_t();
+    tm = gmtime(&tt2);
+  }
+
+  strcpy(bc.id, header_id);
+  le_write16(&bc.version, 1);
+  le_write_float(&bc.latitude, wpt->latitude);
+  le_write_float(&bc.longitude, wpt->longitude);
+  le_write_float(&bc.altitude, METERS_TO_FEET(wpt->altitude));
+  if (tm) {
+    le_write16(&bc.year, tm->tm_year + 1900);
+    le_write16(&bc.month, tm->tm_mon + 1);
+    le_write16(&bc.day, tm->tm_mday);
+    le_write16(&bc.hour, tm->tm_hour);
+    le_write16(&bc.minute, tm->tm_min);
+    le_write16(&bc.second, tm->tm_sec);
+  }
+  le_write_float(&bc.ehpe, wpt->hdop);
+  le_write_float(&bc.evpe, wpt->vdop);
+  le_write_float(&bc.espe, wpt->pdop);
+  le_write_float(&bc.course, wpt->course);
+  le_write_float(&bc.speed, wpt->speed);
+  le_write16(&bc.fix, wpt->fix+1);
+
+  gbfwrite(&bc, sizeof(bc), 1, file_out);
+}
+
+static void
+data_read()
+{
+  read_tracks();
+}
+
+static void
+data_write()
+{
+  track_disp_all(nullptr, nullptr, pocketfms_waypt_disp);
+}
+
+ff_vecs_t pocketfms_bc_vecs = {
+  ff_type_file,
+  {
+    ff_cap_none,                               /* waypoints */
+    (ff_cap)(ff_cap_read | ff_cap_write),      /* tracks */
+    ff_cap_none                                        /* routes */
+  },
+  rd_init,
+  wr_init,
+  rd_deinit,
+  wr_deinit,
+  data_read,
+  data_write,
+  nullptr,
+  nullptr,
+  CET_CHARSET_ASCII, 0 /* CET-REVIEW */
+  , NULL_POS_OPS,
+  nullptr
+};
diff --git a/deprecated/pocketfms_fp.cc b/deprecated/pocketfms_fp.cc
new file mode 100644 (file)
index 0000000..79508f8
--- /dev/null
@@ -0,0 +1,193 @@
+/*
+       Read PocketFMS flightplan files.
+
+       Copyright (C) 2009 Tobias Kretschmar, tobias.kretschmar@gmx.de
+
+       This program is free software; you can redistribute it and/or modify
+       it under the terms of the GNU General Public License as published by
+       the Free Software Foundation; either version 2 of the License, or
+       (at your option) any later version.
+
+       This program is distributed in the hope that it will be useful,
+       but WITHOUT ANY WARRANTY; without even the implied warranty of
+       MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+       GNU General Public License for more details.
+
+       You should have received a copy of the GNU General Public License
+       along with this program; if not, write to the Free Software
+       Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+
+ */
+
+#include <QString>                      // for QString
+#include <QXmlStreamAttributes>         // for QXmlStreamAttributes
+
+#include "defs.h"
+#include "xmlgeneric.h"                 // for cb_cdata, xg_callback, xg_string, cb_start, cb_end, xg_cb_type, xml_deinit, xml_init, xml_read, xg_tag_mapping
+
+
+static int isFirst = 1;
+static route_head* route = nullptr;
+static Waypoint* wpt_to, *wpt_from;
+static double dest_altitude;
+
+#define MYNAME "PocketFMS FlightPlan"
+
+static xg_callback     wpt_s, wpt_from_lat, wpt_from_lon, wpt_from_name, wpt_from_elev;
+static xg_callback     wpt_e, wpt_to_lat, wpt_to_lon, wpt_to_name, wpt_to_elev, wpt_altitude;
+
+static xg_tag_mapping gl_map[] = {
+  { wpt_s,                     cb_start, "/PocketFMSFlightplan/LIB" },
+  { wpt_from_lat,      cb_cdata, "/PocketFMSFlightplan/LIB/FromPoint/Latitude" },
+  { wpt_from_lon,      cb_cdata, "/PocketFMSFlightplan/LIB/FromPoint/Longitude" },
+  { wpt_from_elev,     cb_cdata, "/PocketFMSFlightplan/LIB/FromPoint/Elevation" },
+  { wpt_from_name,     cb_cdata, "/PocketFMSFlightplan/LIB/FromPoint/FriendlyShortname" },
+  { wpt_to_lat,                cb_cdata, "/PocketFMSFlightplan/LIB/ToPoint/Latitude" },
+  { wpt_to_lon,                cb_cdata, "/PocketFMSFlightplan/LIB/ToPoint/Longitude" },
+  { wpt_to_name,               cb_cdata, "/PocketFMSFlightplan/LIB/ToPoint/FriendlyShortname" },
+  { wpt_to_elev,               cb_cdata, "/PocketFMSFlightplan/LIB/ToPoint/Elevation" },
+  { wpt_altitude,      cb_start, "/PocketFMSFlightplan/LIB/PlannedAltitude" },
+  { wpt_e,                     cb_end,   "/PocketFMSFlightplan/LIB" },
+  { nullptr,   (xg_cb_type)0,          nullptr}
+};
+
+static void
+rd_init(const QString& fname)
+{
+  xml_init(fname, gl_map, nullptr);
+}
+
+static void
+data_read()
+{
+  xml_read();
+}
+
+static void
+rd_deinit()
+{
+  if (route != nullptr) {
+    Waypoint* head = route->waypoint_list.front();
+    Waypoint* tail = route->waypoint_list.back();
+    if (head != nullptr) {
+      route->rte_name = head->shortname;
+    }
+    route->rte_name += " - ";
+    if (tail != nullptr) {
+      route->rte_name += tail->shortname;
+      tail->altitude = dest_altitude;
+    }
+  }
+  xml_deinit();
+}
+
+void   wpt_s(xg_string, const QXmlStreamAttributes*)
+{
+  if (isFirst == 1) {
+    wpt_from = new Waypoint;
+    route = new route_head;
+    route->rte_desc="PocketFMS flightplan";
+    route_add_head(route);
+  }
+  wpt_to = new Waypoint;
+}
+
+void   wpt_e(xg_string, const QXmlStreamAttributes*)
+{
+  if (isFirst == 1) {
+    route_add_wpt(route, wpt_from);
+    if (doing_wpts) {
+      waypt_add(new Waypoint(*wpt_from));
+    }
+    wpt_from = nullptr;
+    isFirst = 0;
+  }
+  route_add_wpt(route, wpt_to);
+  if (doing_wpts) {
+    waypt_add(new Waypoint(*wpt_to));
+  }
+  wpt_to = nullptr;
+}
+
+void   wpt_from_lat(xg_string args, const QXmlStreamAttributes*)
+{
+  if (wpt_from != nullptr) {
+    wpt_from->latitude = args.toDouble();
+  }
+}
+
+void   wpt_from_lon(xg_string args, const QXmlStreamAttributes*)
+{
+  if (wpt_from != nullptr) {
+    wpt_from->longitude = args.toDouble();
+  }
+}
+
+void   wpt_from_name(xg_string args, const QXmlStreamAttributes*)
+{
+  if (wpt_from != nullptr) {
+    wpt_from->shortname += args;
+  }
+}
+
+void   wpt_from_elev(xg_string args, const QXmlStreamAttributes*)
+{
+  if (wpt_from != nullptr) {
+    wpt_from->altitude = FEET_TO_METERS(args.toDouble());
+  }
+}
+
+void   wpt_to_lat(xg_string args, const QXmlStreamAttributes*)
+{
+  wpt_to->latitude = args.toDouble();
+}
+
+void   wpt_to_lon(xg_string args, const QXmlStreamAttributes*)
+{
+  wpt_to->longitude = args.toDouble();
+}
+
+void   wpt_to_name(xg_string args, const QXmlStreamAttributes*)
+{
+  wpt_to->shortname += args;
+}
+
+void   wpt_to_elev(xg_string args, const QXmlStreamAttributes*)
+{
+  dest_altitude = FEET_TO_METERS(args.toDouble());
+}
+
+void   wpt_altitude(xg_string, const QXmlStreamAttributes* attrv)
+{
+  int isFeet = 0;
+
+  if (attrv->hasAttribute("Value")) {
+    wpt_to->altitude = attrv->value("Value").toString().toDouble();
+  }
+  if (attrv->hasAttribute("Unit")) {
+    isFeet = (attrv->value("Unit") == u"ft");
+  }
+  if (isFeet) {
+    wpt_to->altitude = FEET_TO_METERS(wpt_to->altitude);
+  }
+}
+
+ff_vecs_t pocketfms_fp_vecs = {
+  ff_type_file,
+  {
+    ff_cap_read        /* waypoints */,
+    ff_cap_none        /* tracks */,
+    ff_cap_read        /* routes */
+  },
+  rd_init,
+  nullptr,
+  rd_deinit,
+  nullptr,
+  data_read,
+  nullptr,
+  nullptr,
+  nullptr,
+  CET_CHARSET_ASCII, 0 /* CET-REVIEW */
+  , NULL_POS_OPS,
+  nullptr
+};
diff --git a/deprecated/pocketfms_wp.cc b/deprecated/pocketfms_wp.cc
new file mode 100644 (file)
index 0000000..40ffd3a
--- /dev/null
@@ -0,0 +1,157 @@
+/*
+       PocketFMS waypoint text files (wpt).
+
+       Copyright (C) 2009 Tobias Kretschmar, tobias.kretschmar@gmx.de
+
+       This program is free software; you can redistribute it and/or modify
+       it under the terms of the GNU General Public License as published by
+       the Free Software Foundation; either version 2 of the License, or
+       (at your option) any later version.
+
+       This program is distributed in the hope that it will be useful,
+       but WITHOUT ANY WARRANTY; without even the implied warranty of
+       MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+       GNU General Public License for more details.
+
+       You should have received a copy of the GNU General Public License
+       along with this program; if not, write to the Free Software
+       Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+ */
+
+#include "defs.h"
+#include "csv_util.h"
+#include <cstdio>
+#include <cstdlib>
+
+#define MYNAME "PocketFMS waypoint text file format"
+
+static gbfile* file_in, *file_out;
+
+static void
+rd_init(const QString& fname)
+{
+  file_in = gbfopen_le(fname, "r", MYNAME);
+}
+
+static double wppos_to_dec(char* value)
+{
+  if (strstr(value, "\xB0") == nullptr) {
+    return atof(value);
+  } else {
+    int degrees, minutes;
+    float seconds;
+    int sign = 1;
+
+    if (toupper(value[0]) == 'N' || toupper(value[0]) == 'E' || value[0] == '+') {
+      value = &value[1];
+    } else if (toupper(value[0]) == 'S' || toupper(value[0]) == 'W' || value[0] == '-') {
+      value = &value[1];
+      sign = -1;
+    }
+
+    sscanf(value, "%d\xB0%d'%f\"", &degrees, &minutes, &seconds);
+    return sign * (degrees + ((float)minutes / 60) + (seconds / 3600));
+  }
+}
+
+static void
+data_read()
+{
+  char* buff;
+  int linecount = 0;
+  while ((buff = gbfgetstr(file_in))) {
+    rtrim(buff);
+    if (strlen(buff) == 0) {
+      break;
+    }
+    linecount++;
+    auto* wpt = new Waypoint;
+    char* s = buff;
+    s = csv_lineparse(s, "\\w", "", linecount);
+    if (!s) {
+      fatal(MYNAME "Invalid name");
+    }
+    wpt->shortname = s;
+    s = csv_lineparse(nullptr, "\\w", "", linecount);
+    if (!s) {
+      fatal(MYNAME "Invalid latitude %s", qPrintable(wpt->shortname));
+    }
+    wpt->latitude = wppos_to_dec(s);
+
+    s = csv_lineparse(nullptr, "\\w", "", linecount);
+    if (!s) {
+      fatal(MYNAME "Invalid longitude %s", qPrintable(wpt->shortname));
+    }
+    wpt->longitude = wppos_to_dec(s);
+    waypt_add(wpt);
+
+    // continue reading until csv_lineparse returns null indicating all dynamic memory has been deallocated.
+    while (csv_lineparse(nullptr, "\\w", "", linecount));
+  }
+}
+
+static void
+rd_deinit()
+{
+  gbfclose(file_in);
+}
+
+static void
+wr_init(const QString& fname)
+{
+  file_out = gbfopen_le(fname, "w", MYNAME);
+}
+
+static void
+enigma_waypt_disp(const Waypoint* wpt)
+{
+  if (!wpt->shortname.isEmpty()) {
+    // The output might have a space or control character.
+    int l = wpt->shortname.length();
+    char *t = (char*) xmalloc(l + 1);
+    char* d = t;
+    for (int i = 0; i < l; i++) {
+      char s = wpt->shortname[i].cell();
+      if (isgraph(s)) {
+        *d++ = s;
+      }
+    }
+    *d = 0;
+    gbfprintf(file_out, "%s %f %f\n", t, wpt->latitude, wpt->longitude);
+    xfree(t);
+  } else {
+    gbfprintf(file_out, "%s %f %f\n", "NONAME", wpt->latitude, wpt->longitude);
+  }
+}
+
+static void
+data_write()
+{
+  waypt_disp_all(enigma_waypt_disp);
+}
+
+static void
+wr_deinit()
+{
+  gbfclose(file_out);
+}
+
+ff_vecs_t pocketfms_wp_vecs = {
+  ff_type_file,
+  {
+    (ff_cap)(ff_cap_read | ff_cap_write),      /* waypoints */
+    ff_cap_none,                    /* tracks */
+    ff_cap_none,                       /* routes */
+  },
+  rd_init,
+  wr_init,
+  rd_deinit,
+  wr_deinit,
+  data_read,
+  data_write,
+  nullptr,
+  nullptr,
+  CET_CHARSET_ASCII, 0 /* CET-REVIEW */
+  , NULL_POS_OPS,
+  nullptr
+};
diff --git a/deprecated/skyforce.cc b/deprecated/skyforce.cc
new file mode 100644 (file)
index 0000000..b5152f1
--- /dev/null
@@ -0,0 +1,386 @@
+/*
+
+    Support for SkymapII / SkymapIIIC & KMD150 ascii files
+
+    Copyright (C) 2008 Olaf Klein, o.b.klein@gpsbabel.org
+
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+
+ */
+
+
+
+#include "defs.h"
+#include <cmath>
+#include <cstdio>
+#include <cstdlib>
+
+#define MYNAME "skyforce"
+
+
+static
+QVector<arglist_t> skyforce_args = {
+};
+
+static gbfile* fin, *fout;
+static int rte_num, wpt_num;
+static short_handle short_h;
+static const Waypoint* prev_wpt;
+
+
+static Waypoint*
+skyforce_parse_coords(const char* str)
+{
+  if (strlen(str) < 38) {
+    fatal(MYNAME ": Incomplete line!\n");
+  }
+
+  auto* wpt = new Waypoint;
+
+  wpt->latitude = atof(str + 21);
+  if (str[20] == 'S') {
+    wpt->latitude = -wpt->latitude;
+  }
+  wpt->latitude = ddmm2degrees(wpt->latitude);
+
+  wpt->longitude = atof(str + 30);
+  if (str[29] == 'W') {
+    wpt->longitude = -wpt->longitude;
+  }
+  wpt->longitude = ddmm2degrees(wpt->longitude);
+
+  return wpt;
+}
+
+
+static Waypoint*
+skyforce_parse_wpt(const char* str, int* rte_num_out)
+{
+  Waypoint* wpt = skyforce_parse_coords(str);
+  if (wpt == nullptr) {
+    return nullptr;
+  }
+
+  // The line has fixed columns and starts like:
+  // R 001 029 BEARHILL  N42...
+  // Grab "BEARHILL" and whack trailing space.
+  wpt->shortname = QString(str).mid(10,9).trimmed();
+
+  if (rte_num_out) {
+    *rte_num_out = atoi(str + 2);
+  }
+
+  return wpt;
+}
+
+
+static Waypoint*
+skyforce_parse_trk(const char* str)
+{
+  char buf[15];
+
+  Waypoint* wpt = skyforce_parse_coords(str);
+  if (wpt == nullptr) {
+    return nullptr;
+  }
+  strncpy(buf, str + 2, sizeof(buf) - 1);
+  buf[14] = 0;
+
+  QDateTime dt = QDateTime::fromString(buf, "ddMMyy  hhmmss");
+  dt.setTimeSpec(Qt::UTC);
+  dt = dt.addYears(100);
+
+  wpt->SetCreationTime(dt);
+  int len = strlen(str);
+
+  if (len >= 45) {
+    WAYPT_SET(wpt, speed, KNOTS_TO_MPS(atof(str + 39)));
+  }
+  if (len >= 59) {
+    wpt->altitude = FEET_TO_METERS(atof(str + 54));
+    if (str[53] == '-') {
+      wpt->altitude = -wpt->altitude;
+    }
+  }
+
+  return wpt;
+}
+
+
+static void
+skyforce_head_disp_cb(const route_head* head)
+{
+  prev_wpt = nullptr;
+  if (head->rte_waypt_ct() <= 0) {
+    return;
+  }
+
+  wpt_num = 0;
+  rte_num++;
+
+  if (rte_num > 999) {
+    if (rte_num == 1000) {
+      warning(MYNAME ": Can't store more than 999 routes. Some routes skipped!\n");
+    }
+    return;
+  }
+}
+
+
+static void
+skyforce_waypt_disp_cb(const Waypoint* wpt)
+{
+  char buf[75];        /* long enough for all data types */
+
+
+  memset(buf, ' ', sizeof(buf));
+  buf[sizeof(buf) - 1] = '\0';
+
+  switch (global_opts.objective) {
+  case wptdata:
+    buf[0] = 'W';
+    break;
+  case trkdata:
+    buf[0] = 'L';
+    break;
+  case rtedata:
+    buf[0] = 'R';
+    break;
+  default: ; /* should never happen */
+  }
+
+  if (global_opts.objective == trkdata) {
+    struct tm tm;
+
+    const time_t tt = wpt->GetCreationTime().toTime_t();
+    tm = *gmtime(&tt);
+    strftime(buf + 2, sizeof(buf) - 2, "%d%m%y  %H%M%S    ", &tm);
+  } else {
+    if (rte_num > 999) {
+      return;
+    }
+
+    wpt_num++;
+    if (wpt_num > 999) {
+      if (wpt_num == 1000) {
+        warning(MYNAME ": Can't store more than 999 waypoints. Some waypoints skipped!\n");
+      }
+      return;
+    }
+    QString name;
+    if (global_opts.synthesize_shortnames) {
+      name = mkshort_from_wpt(short_h, wpt);
+    } else {
+      name = mkshort(short_h, wpt->shortname);
+    }
+
+    if (global_opts.objective == rtedata) {
+      snprintf(buf + 2, sizeof(buf) - 2, "%03d ", rte_num);
+    }
+    snprintf(buf + 6, sizeof(buf) - 6, "%03d %-9s ", wpt_num, CSTR(name));
+  }
+
+
+  double lat = degrees2ddmm(wpt->latitude);
+  buf[20] = (wpt->latitude < 0) ? 'S' : 'N';
+  snprintf(&buf[21], sizeof(buf) - 21, "%06.2f ", fabs(lat));
+
+  double lon = degrees2ddmm(wpt->longitude);
+  buf[29] = (wpt->longitude < 0) ? 'W' : 'E';
+  snprintf(&buf[30], sizeof(buf) - 30, "%08.2f ", fabs(lon));
+
+  if (global_opts.objective == trkdata) {
+    double alt;
+
+    if (wpt->altitude == unknown_alt) {
+      alt = 0;
+    } else {
+      alt = METERS_TO_FEET(wpt->altitude);
+    }
+    double speed = MPS_TO_KNOTS(waypt_speed(prev_wpt, wpt));
+
+    snprintf(&buf[39], sizeof(buf) - 39, "%06.2f 000.00 %c%05d",
+             speed,
+             alt < 0 ? '-' : '+', si_round(fabs(alt)));
+  }
+
+  rtrim(buf);
+  gbfprintf(fout, "%s\n", buf);
+
+  prev_wpt = wpt;
+}
+
+/*******************************************************************************
+* %%%        global callbacks called by gpsbabel main process              %%% *
+*******************************************************************************/
+
+static void
+skyforce_rd_init(const QString& fname)
+{
+  fin = gbfopen(fname, "r", MYNAME);
+}
+
+
+static void
+skyforce_rd_deinit()
+{
+  gbfclose(fin);
+}
+
+
+static void
+skyforce_read()
+{
+  char* str;
+
+  wpt_num = 0;
+  route_head* rte = nullptr;
+  route_head* trk = nullptr;
+  rte_num = -1;
+
+  while ((str = gbfgetstr(fin))) {
+
+    Waypoint* wpt;
+    int i;
+
+    str = lrtrim(str);
+    if (*str == '\0') {
+      continue;
+    }
+
+    switch (*str) {
+
+    case 'W':
+      wpt = skyforce_parse_wpt(str, nullptr);
+      if (wpt == nullptr) {
+        continue;
+      }
+      waypt_add(wpt);
+      break;
+
+    case 'R':
+      wpt = skyforce_parse_wpt(str, &i);
+      if (wpt == nullptr) {
+        continue;
+      }
+
+      if (i != rte_num) {
+        rte_num = i;
+        rte = nullptr;
+      }
+
+      if (rte == nullptr) {
+        rte = new route_head;
+        route_add_head(rte);
+        rte->rte_num = rte_num;
+      }
+      route_add_wpt(rte, wpt);
+      break;
+
+    case 'L':
+      wpt = skyforce_parse_trk(str);
+      if (wpt == nullptr) {
+        continue;
+      }
+      if (trk == nullptr) {
+        trk = new route_head;
+        track_add_head(trk);
+      }
+      track_add_wpt(trk, wpt);
+      break;
+
+    default:
+      fatal(MYNAME ": Invalid line marker '%c'!\n", *str);
+    }
+  }
+}
+
+
+static void
+skyforce_wr_init(const QString& fname)
+{
+  fout = gbfopen(fname, "w", MYNAME);
+
+  short_h = mkshort_new_handle();
+
+  setshort_length(short_h, 9);
+  setshort_badchars(short_h, "\r\n\t");
+  setshort_mustupper(short_h, 1);
+  setshort_mustuniq(short_h, 1);
+  setshort_whitespace_ok(short_h, 0);
+  setshort_repeating_whitespace_ok(short_h, 0);
+
+  wpt_num = 0;
+  rte_num = 0;
+}
+
+
+static void
+skyforce_wr_deinit()
+{
+  mkshort_del_handle(&short_h);
+  gbfclose(fout);
+}
+
+
+static void
+skyforce_write()
+{
+  switch (global_opts.objective) {     /* We can only write one data type at a time */
+
+  case wptdata:
+    setshort_defname(short_h, "WPT");
+    waypt_disp_all(skyforce_waypt_disp_cb);
+    break;
+
+  case rtedata:
+    setshort_defname(short_h, "RTE");
+    setshort_mustuniq(short_h, 0);
+    route_disp_all(skyforce_head_disp_cb, nullptr, skyforce_waypt_disp_cb);
+    break;
+
+  case trkdata:
+    track_disp_all(skyforce_head_disp_cb, nullptr, skyforce_waypt_disp_cb);
+    break;
+
+  case posndata:
+    fatal(MYNAME ": Realtime positioning not supported.\n");
+    break;
+
+  default:
+    fatal(MYNAME ": Unknown data mode!\n");
+  }
+}
+
+
+/**************************************************************************/
+
+ff_vecs_t skyforce_vecs = {
+  ff_type_file,
+  FF_CAP_RW_ALL,       /* read and write waypoints, tracks and routes*/
+  skyforce_rd_init,
+  skyforce_wr_init,
+  skyforce_rd_deinit,
+  skyforce_wr_deinit,
+  skyforce_read,
+  skyforce_write,
+  nullptr,
+  &skyforce_args,
+  CET_CHARSET_ASCII, 1
+  , NULL_POS_OPS,
+  nullptr
+};
+
+/**************************************************************************/
diff --git a/deprecated/stmsdf.cc b/deprecated/stmsdf.cc
new file mode 100644 (file)
index 0000000..0787696
--- /dev/null
@@ -0,0 +1,831 @@
+/*
+
+    Support for Suunto Trackmanager SDF format.
+
+    Copyright (C) 2005,2007 Olaf Klein, o.b.klein@gpsbabel.org
+
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+*/
+
+/*
+    2006/04/05: initial release (not published in GPSBabel)
+    2006/07/19: finished reader and writer for type 4,5,28 of ver. 1
+    2006/10/31: remove wptdata from case statement (data_write)
+
+    ToDo: Ascending/Descending
+*/
+
+#include "defs.h"
+
+#if CSVFMTS_ENABLED
+
+#include <algorithm>                  // for sort
+#include <cstdlib>                    // for atoi
+#include <cstring>                    // for strchr
+#include <ctime>                      // for localtime, strftime
+
+#include <QDate>                      // for QDate
+#include <QDateTime>                  // for QDateTime
+#include <QList>                      // for QList<>::iterator, QList
+#include <QRegularExpression>         // for QRegularExpression
+#include <QString>                    // for QString, operator+
+#include <QStringList>                // for QStringList
+#include <QTime>                      // for QTime
+#include <QtGlobal>                   // for qAsConst, QAddConst<>::Type
+
+#include "cet_util.h"                 // for cet_convert_init
+#include "csv_util.h"                 // for csv_lineparse
+#include "gbfile.h"                   // for gbfprintf, gbfclose, gbfopen, gbfgetstr, gbfile
+#include "grtcirc.h"                  // for RAD, gcdist, heading_true_degrees, radtometers
+#include "jeeps/gpsmath.h"            // for GPS_Lookup_Datum_Index, GPS_Math_WGS84_To_Known_Datum_M
+#include "src/core/datetime.h"        // for DateTime
+#include "src/core/logging.h"         // for Warning, Fatal
+
+
+#define MYNAME "stmsdf"
+
+#define ALT(a) (a->altitude != unknown_alt) ? a->altitude : 0
+
+enum sdf_section_e {
+  sdf_unknown,
+  sdf_header,
+  sdf_points,
+  sdf_custom
+};
+
+static gbfile* fin, *fout;
+
+static int lineno;
+static int datum;
+static int filetype;
+static route_head* route;
+static QList<Waypoint*> trackpts;
+static QString rte_name;
+static QString rte_desc;
+
+static const Waypoint* trkpt_out;
+static const route_head* trk_out;
+
+static double trkpt_dist;
+static double minalt, maxalt, maxspeed;
+static double this_distance, all_dist;
+static time_t this_time, all_time;
+static double all_asc, all_desc;
+static int this_index;                 /* from 1 to ... */
+static int all_points;
+static int this_points;
+static int saved_points;
+static time_t start_time;
+static bool this_valid;
+static short_handle short_h;
+
+#define route_index this_index
+#define track_index this_index
+#define all_route_points all_points
+#define all_track_points all_points
+#define route_points this_points
+#define track_points this_points
+#define saved_track_points saved_points
+#define this_route_valid this_valid
+
+/* placeholders for options */
+
+static char* opt_route_index;
+static int opt_route_index_value;
+
+static
+QVector<arglist_t> stmsdf_args = {
+  {
+    "index", &opt_route_index,
+    "Index of route (if more than one in source)", "1", ARGTYPE_INT, "1", nullptr, nullptr
+  },
+};
+
+
+/* ----------------------------------------------------------- */
+
+static void
+parse_header(char* line)
+{
+  char* str;
+  QString key;
+  const char* prod = nullptr;
+  int column = -1;
+
+  while ((str = csv_lineparse(line, "=", "", lineno))) {
+    line = nullptr;
+    column++;
+    QString qstr(str);
+    bool ok;
+
+    switch (column) {
+    case 0:
+      key = qstr.toUpper();
+      break;
+    case 1:
+      if (key == "DATUM") {
+        datum = GPS_Lookup_Datum_Index(str);
+      } else if (key == "FILEVERSION") {
+        int ver = qstr.toInt(&ok);
+        is_fatal(!ok || (ver != 1),
+                 MYNAME ": This version '%d' is not yet supported. Please report!", ver);
+      } else if (key == "NAME") {
+        rte_name = str;
+      } else if (key == "NOTES") /* ToDo */;
+      else if (key == "SOURCE") {
+        rte_desc = str;
+      } else if (key == "TYPE") {
+        filetype = qstr.toInt(&ok);
+        if (!ok) {
+          fatal(FatalMsg() << MYNAME << "Unknown file type " << key);
+        }
+        switch (filetype) {
+        case 4:        /* M9 TrackLog (Suunto Sail Manager) */
+        case 5: /* route */
+        case 28: /* X9 TrackLog (Suunto Trek Manager */
+          break;
+
+        // 2014-02-11: Added breaks after 78 and 79 as the author "obviously"
+        // meant to treat those as handled.
+        case 78:
+          prod = "S6 SkiChrono";
+          break;
+        case 79:
+          prod = "S6 Skilog";
+          break;
+
+        default:
+          if (prod == nullptr) {
+            prod = "unknown";
+          }
+          fatal(MYNAME ": Unsupported file type (%s, type %d)!\n", prod, filetype);
+        }
+        break;
+      default:
+        break;
+      }
+    }
+  }
+}
+
+static bool
+track_sort_cb(const Waypoint* a, const Waypoint* b)
+{
+  return a->GetCreationTime() < b->GetCreationTime();
+}
+
+static void
+finalize_tracks()
+{
+  route_head* track = nullptr;
+  int trackno = 0;
+
+  if (trackpts.isEmpty()) {
+    return;
+  }
+
+  std::sort(trackpts.begin(), trackpts.end(), track_sort_cb);
+
+  foreach (Waypoint* wpt, trackpts) {
+    if (wpt->wpt_flags.fmt_use == 2) { /* log continued */
+      track = nullptr;
+    }
+    if (track == nullptr) {
+      track = new route_head;
+      track_add_head(track);
+      trackno++;
+      if (rte_name != nullptr) {
+        if (trackno > 1) {
+          track->rte_name = QString("%1 (%2)").arg(rte_name).arg(trackno);
+        } else {
+          track->rte_name = rte_name;
+        }
+      }
+      if (rte_desc != nullptr) {
+        track->rte_desc = rte_desc;
+      }
+    }
+    track_add_wpt(track, wpt);
+    if (wpt->wpt_flags.fmt_use == 1) { /* log pause */
+      track = nullptr;
+    }
+    wpt->wpt_flags.fmt_use = 0;
+  }
+
+  trackpts.clear();
+}
+
+static void
+parse_point(char *line) {
+  char *str;
+  int column = -1;
+  int what = -1;        /* -1 = unknown, 0 = tp, 1 = mp, 2 = wp, 3 = ap  */
+  Waypoint *wpt = nullptr;
+  QDate dt;
+  QTime tm;
+
+  while ((str = csv_lineparse(line, ",", "", lineno))) {
+
+    line = nullptr;
+    column++;
+    QString qstr(str);
+    bool ok(true);
+    // TODO: Several entries use a QString variant. This whole function should just parse it like that.
+
+    switch (column) {
+      case 0:
+        if (qstr == "\"TP\"") {
+          what = 0;
+          column++;    /* skip name */
+        } else if (qstr == "\"MP\"") {
+          what = 1;
+        } else if (qstr == "\"WP\"") {
+          what = 2;
+        } else if (qstr == "\"AP\"") {
+          what = 3;
+        } else {
+          warning(MYNAME ": Unknown point type %s at line %d!\n", str, lineno);
+          return;
+        }
+        wpt = new Waypoint;
+        break;
+
+      case 1:
+        wpt->shortname = qstr.remove('\"');
+        if ((what == 2) || (what == 3)) {
+          column += 2;  /* doesn't have date and time */
+        }
+        break;
+      case 2: {
+        // Date is in format dd.mm.yyyy
+        const auto v = qstr.split('.');
+
+        if (v.size() == 3) {
+          auto day = v[0].toInt();
+          auto month = v[1].toInt();
+          auto year = v[2].toInt();
+          dt = QDate(year, month, day);
+        } else {
+          fatal(FatalMsg() << MYNAME << "Invalid date" << qstr);
+        }
+        break;
+      }
+      case 3: {
+        // Time is hh:mm.ss - yes, colon and period.
+        const auto v = qstr.split(QRegularExpression("[.:]"));
+        if (v.size() == 3) {
+          auto hour = v[0].toInt();
+          auto min = v[1].toInt();
+          auto sec = v[2].toInt();
+          tm = QTime(hour, min, sec);
+        } else {
+          fatal(FatalMsg() << MYNAME << "Invalid Time" << qstr);
+        }
+        break;
+      }
+      case 4:
+        wpt->latitude = qstr.toDouble(&ok);
+        if (!ok) {
+          fatal(FatalMsg() << MYNAME << "Invalid latitude" << qstr);
+        }
+        break;
+      case 5:
+        wpt->longitude = qstr.toDouble(&ok);
+        if (!ok) {
+          fatal(FatalMsg() << MYNAME << "Invalid longitude" << qstr);
+        }
+        break;
+      case 6: {
+        // Not entirely sure if this is optional.
+        double alt = qstr.toDouble(&ok);
+        if (ok) {
+          wpt->altitude = alt;
+        }
+      }
+        break;
+      case 7: {
+        auto v = qstr.toFloat(&ok);
+        if (ok) {
+          if (what == 0) {
+            WAYPT_SET(wpt, speed, v * 3.6);
+          } else if (what == 3) {
+            WAYPT_SET(wpt, proximity, v);
+            wpt->notes = QString("Alarm point: radius=" + qstr);
+          }
+        }
+        break;
+      }
+      case 8:
+        if (what == 0) {
+          auto scourse = qstr.toFloat(&ok);
+          if (ok) {
+            WAYPT_SET(wpt, course, scourse);
+          }
+        }
+        break;
+      case 9:
+      case 10:
+      default:
+        break;
+      case 11:
+        if (wpt && what == 1) {
+          wpt->wpt_flags.fmt_use = qstr.toUInt(&ok);  /* memory point type */
+        }
+        break;
+    }
+  }
+
+  if (dt.isValid() && tm.isValid()) {
+    wpt->SetCreationTime(QDateTime(dt, tm));
+  }
+
+  if (datum != DATUM_WGS84) {
+    double ht;
+    GPS_Math_WGS84_To_Known_Datum_M(wpt->latitude, wpt->longitude, 0,
+                                    &wpt->latitude, &wpt->longitude, &ht, datum);
+  }
+
+  switch (what) {
+    case 0:
+    case 1:
+    trackpts.append(wpt);
+      break;
+    case 2:
+    case 3:
+      if (route == nullptr) {
+        route = new route_head;
+        route_add_head(route);
+      }
+      route_add_wpt(route, wpt);
+      break;
+    default:
+      Warning() << MYNAME << "Invalid internal field type" << what;
+  }
+}
+
+/* ----------------------------------------------------------- */
+
+static void
+rd_init(const QString& fname)
+{
+  fin = gbfopen(fname, "r", MYNAME);
+
+  lineno = 0;
+  route = nullptr;
+  datum = DATUM_WGS84;
+  filetype = 28;
+  rte_name = rte_desc = QString();
+
+  trackpts.clear();
+}
+
+static void
+rd_deinit()
+{
+  gbfclose(fin);
+  rte_name = QString();
+  rte_desc = QString();
+}
+
+static void
+data_read()
+{
+  char* buf;
+  sdf_section_e section = sdf_unknown;
+
+  while ((buf = gbfgetstr(fin))) {
+    char* cin = lrtrim(buf);
+    if ((lineno++ == 0) && fin->unicode) {
+      cet_convert_init(CET_CHARSET_UTF8, 1);
+    }
+
+    if (*cin == '\0') {
+      continue;
+    }
+
+    if (*cin == '[') {
+      char* cend = strchr(++cin, ']');
+
+      if (cend != nullptr) {
+        *cend = '\0';
+        cin = lrtrim(cin);
+      }
+      if ((*cin == '\0') || (cend == nullptr)) {
+        fatal(MYNAME ": Invalid section header!\n");
+      }
+
+      if (case_ignore_strcmp(cin, "HEADER") == 0) {
+        section = sdf_header;
+      } else if (case_ignore_strcmp(cin, "POINTS") == 0) {
+        section = sdf_points;
+      } else if (case_ignore_strncmp(cin, "CUSTOM", 6) == 0) {
+        section = sdf_custom;
+      } else {
+        warning(MYNAME ": Unknown section \"%s\". Please report.\n", cin);
+        section = sdf_unknown;
+      }
+    } else switch (section) {
+      case sdf_header:
+        parse_header(cin);
+        break;
+      case sdf_points:
+        parse_point(cin);
+        break;
+      case sdf_custom:
+      case sdf_unknown:
+        break;
+      }
+  }
+  finalize_tracks();   /* memory points can be at the end of all trackpoints */
+}
+
+
+static void
+calculate(const Waypoint* wpt, double* dist, double* speed, double* course,
+          double* asc, double* desc)
+{
+  if (trkpt_out != nullptr) {
+    *course = heading_true_degrees(
+                RAD(trkpt_out->latitude), RAD(trkpt_out->longitude),
+                RAD(wpt->latitude), RAD(wpt->longitude));
+
+    *dist = radtometers(gcdist(
+                          RAD(trkpt_out->latitude), RAD(trkpt_out->longitude),
+                          RAD(wpt->latitude), RAD(wpt->longitude)));
+    if (*dist < 0.1) {
+      *dist = 0;  /* calc. diffs on 32- and 64-bit hosts */
+    }
+
+    time_t time = wpt->creation_time.toTime_t() - trkpt_out->GetCreationTime().toTime_t();
+    if (time == 0) {
+      *speed = 0;
+    } else {
+      *speed = *dist / (double)time;
+    }
+
+    if (asc && desc && (trkpt_out->altitude != unknown_alt) && (wpt->altitude != unknown_alt)) {
+      double dh = wpt->altitude - trkpt_out->altitude;
+      if (dh > 0) {
+        *asc += dh;
+      } else {
+        *desc -= dh;
+      }
+    }
+  } else {
+    *speed = 0;
+    *dist = 0;
+    *course = 0;
+    if (asc) {
+      *asc = 0;
+    }
+    if (desc) {
+      *desc = 0;
+    }
+  }
+  if WAYPT_HAS(wpt, speed) {
+    *speed = wpt->speed / 3.6;  /* -> meters per second */
+  }
+  if WAYPT_HAS(wpt, course) {
+    *course = wpt->course;
+  }
+
+}
+
+/* pre-calculation callbacks */
+
+static void
+any_hdr_calc_cb(const route_head* trk)
+{
+
+  trkpt_out = nullptr;
+  this_distance = 0;
+  this_time = 0;
+  this_points = 0;
+
+  this_index++;
+  this_valid = ((opt_route_index_value < 1) || (opt_route_index_value == this_index));
+  if (! this_valid) {
+    return;
+  }
+
+  if (rte_name.isEmpty() && !trk->rte_name.isEmpty()) {
+    rte_name = trk->rte_name;
+    rte_desc = trk->rte_desc;
+  }
+
+  trk_out = trk;
+}
+
+static void
+any_waypt_calc_cb(const Waypoint* wpt)
+{
+  double speed, course, dist;
+
+  /* we can only write ONE route */
+  if (! this_valid) {
+    return;
+  }
+
+  if ((all_points == 0) && (this_points == 0)) {
+    start_time = wpt->GetCreationTime().toTime_t();
+  }
+
+  this_points++;
+
+  if ((wpt->altitude != unknown_alt) && (wpt->altitude < minalt)) {
+    minalt = wpt->altitude;
+  }
+  if ((wpt->altitude != unknown_alt) && (wpt->altitude > maxalt)) {
+    maxalt = wpt->altitude;
+  }
+  calculate(wpt, &dist, &speed, &course, &all_asc, &all_desc);
+  if (speed > maxspeed) {
+    maxspeed = speed;
+  }
+
+  this_distance = this_distance + dist;
+  if (trkpt_out != nullptr) {
+    this_time += (wpt->GetCreationTime().toTime_t() - trkpt_out->GetCreationTime().toTime_t());
+  }
+
+  trkpt_out = wpt;
+}
+
+static void
+any_tlr_calc_cb(const route_head*)
+{
+  if (! this_valid) {
+    return;
+  }
+
+  all_dist += this_distance;
+  all_time += this_time;
+  all_points += this_points;
+}
+
+/* write callbacks */
+
+static void
+track_disp_hdr_cb(const route_head* trk)
+{
+  track_index++;
+  track_points = 0;
+  trk_out = trk;
+  trkpt_out = nullptr;
+}
+
+
+static void
+track_disp_wpt_cb(const Waypoint* wpt)
+{
+  struct tm tm;
+  char tbuf[32];
+  double course, speed, dist;
+  int flag = 0;
+
+  track_points++;
+  all_track_points++;
+
+  time_t ct = wpt->GetCreationTime().toTime_t();
+  tm = *localtime(&ct);
+  strftime(tbuf, sizeof(tbuf), "%d.%m.%Y,%H:%M.%S", &tm);
+
+  calculate(wpt, &dist, &speed, &course, nullptr, nullptr);
+  trkpt_dist = trkpt_dist + dist;
+
+  if (track_points == trk_out->rte_waypt_ct()) {       /* I'm the last in that list */
+    if (all_track_points != saved_track_points) {      /* but not the overall latest */
+      flag = 1;
+    }
+  } else if (track_points == 1) {                      /* I'm the first in that list */
+    if (all_track_points > 1) {                        /* but not the first ever seen */
+      flag = 2;
+    }
+  }
+
+  if (flag == 1) {
+    QString name = wpt->shortname;
+    if (name == nullptr) {
+      name = "Log paused";
+    }
+    gbfprintf(fout, "\"MP\",\"%s\"", CSTR(name));
+  } else if (flag == 2) {
+    QString name = wpt->shortname;
+    if (name == nullptr) {
+      name = "Log continued";
+    }
+    gbfprintf(fout, "\"MP\",\"%s\"", CSTR(name));
+  } else {
+    gbfprintf(fout, "\"TP\"");
+  }
+
+  gbfprintf(fout, ",%s,%.6lf,%.6lf,%.f,%.2f",
+            tbuf,
+            wpt->latitude, wpt->longitude, ALT(wpt), speed);
+  if (flag) {
+    gbfprintf(fout, ",0,0,%d", flag);  /* press, temperature, memory point type */
+  } else {
+    gbfprintf(fout, ",%.1f", course);
+  }
+
+  if (trkpt_dist != 0) {
+    gbfprintf(fout, ",%.6f\n", trkpt_dist);
+  } else {
+    gbfprintf(fout, ",0\n");
+  }
+
+  trkpt_out = wpt;
+}
+
+static void
+track_disp_tlr_cb(const route_head*)
+{
+  trkpt_out = nullptr;
+}
+
+static void
+route_disp_hdr_cb(const route_head*)
+{
+  route_index++;
+  this_route_valid = ((opt_route_index_value < 1) || (opt_route_index_value == track_index));
+}
+
+static void
+route_disp_wpt_cb(const Waypoint* wpt)
+{
+  if (this_route_valid) {
+    QString sn;
+
+    if (global_opts.synthesize_shortnames) {
+      sn = mkshort_from_wpt(short_h, wpt);
+    } else {
+      sn = mkshort(short_h, wpt->shortname);
+    }
+    gbfprintf(fout, "\"WP\",\"%s\",%.8lf,%.8lf,%.f\n",
+              CSTR(sn), wpt->latitude, wpt->longitude, ALT(wpt));
+  }
+}
+
+static void
+track_disp_custom_cb(const Waypoint* wpt)
+{
+  if (wpt->GetCreationTime().isValid() && (wpt->altitude != unknown_alt)) {
+    gbfprintf(fout, "%d,%.f\n", (int)(wpt->GetCreationTime().toTime_t() - start_time), wpt->altitude);
+  }
+}
+
+static void
+wr_init(const QString& fname)
+{
+  fout = gbfopen(fname, "w", MYNAME);
+  short_h = mkshort_new_handle();
+}
+
+static void
+wr_deinit()
+{
+  mkshort_del_handle(&short_h);
+  gbfclose(fout);
+}
+
+static void
+data_write()
+{
+  gbfprintf(fout, "[HEADER]\n");
+  gbfprintf(fout, "FILEVERSION=1\n");
+  gbfprintf(fout, "SOURCE=FILE\n");
+  gbfprintf(fout, "DATUM=WGS84\n");
+
+  rte_name = QString();
+  rte_desc = QString();
+  trkpt_out = nullptr;
+  opt_route_index_value = -1;  /* take all tracks from data pool */
+  track_index = 0;
+  minalt = -unknown_alt;
+  maxalt = unknown_alt;
+  maxspeed = 0;
+  all_dist = 0;
+  all_time = 0;
+  all_asc = 0;
+  all_desc = 0;
+  all_points = 0;
+  start_time = 0;
+
+  setshort_length(short_h, 100);
+  setshort_badchars(short_h, "\r\n");
+  setshort_mustupper(short_h, 0);
+  setshort_mustuniq(short_h, 0);
+  setshort_whitespace_ok(short_h, 1);
+  setshort_repeating_whitespace_ok(short_h, 1);
+
+  switch (global_opts.objective) {
+  case wptdata:
+  case unknown_gpsdata:
+    break;
+
+  case rtedata:
+    gbfprintf(fout, "TYPE=5\n");
+
+    opt_route_index_value = atoi(opt_route_index);
+    route_disp_all(any_hdr_calc_cb, any_tlr_calc_cb, any_waypt_calc_cb);
+    gbfprintf(fout, "DISTANCE=%.f\n", all_dist);
+    if (!rte_name.isEmpty()) {
+      gbfprintf(fout, "NAME=%s\n", CSTR(rte_name));
+    }
+    gbfprintf(fout, "[POINTS]\n");
+    if (route_points > 0) {
+      track_index = 0;
+      route_disp_all(route_disp_hdr_cb, nullptr, route_disp_wpt_cb);
+    }
+    break;
+
+  case trkdata:
+    gbfprintf(fout, "TYPE=28\n");
+
+    track_disp_all(any_hdr_calc_cb, any_tlr_calc_cb, any_waypt_calc_cb);
+    if (all_track_points > 0) {
+      if (!rte_name.isEmpty()) {
+        gbfprintf(fout, "NAME=%s\n", CSTR(rte_name));
+      }
+      if (minalt != -unknown_alt) {
+        gbfprintf(fout, "MINALT=%.f\n", minalt);
+      }
+      if (maxalt != unknown_alt) {
+        gbfprintf(fout, "MAXALT=%.f\n", maxalt);
+      }
+      gbfprintf(fout, "MAXSPEED=%.2f\n", maxspeed);
+      gbfprintf(fout, "DISTANCE=%.f\n", all_dist);
+      gbfprintf(fout, "DURATION=%lu\n", all_time);
+//                             gbfprintf(fout, "TOTASC=%.f\n", all_asc);
+//                             gbfprintf(fout, "TOTDSC=%.f\n", all_desc);
+      if (start_time) {
+        struct tm tm;
+        char tbuf[32];
+
+        tm = *localtime(&start_time);
+        strftime(tbuf, sizeof(tbuf), "%d.%m.%Y %H:%M.%S", &tm);
+        gbfprintf(fout, "DATE=%s\n", tbuf);
+      }
+      if (all_time) {
+        gbfprintf(fout, "AVGSPEED=%.2f\n", all_dist / (double)all_time);
+      }
+    }
+    gbfprintf(fout, "[POINTS]\n");
+    if (all_track_points > 0) {
+
+      trkpt_dist = 0;
+      saved_track_points = all_track_points;
+      all_track_points = 0;
+      track_disp_all(track_disp_hdr_cb, track_disp_tlr_cb, track_disp_wpt_cb);
+
+      if (start_time) {
+        gbfprintf(fout, "[CUSTOM1]\n");
+        track_index = 0;
+        track_disp_all(nullptr, nullptr, track_disp_custom_cb);
+      }
+    }
+    break;
+  case posndata:
+    fatal(MYNAME ": Realtime positioning not supported.\n");
+    break;
+  }
+}
+
+/* ------------------------------------------------------------------ */
+
+ff_vecs_t stmsdf_vecs = {
+  ff_type_file,
+  {
+    ff_cap_none,
+    (ff_cap)(ff_cap_read | ff_cap_write),
+    (ff_cap)(ff_cap_read | ff_cap_write)
+  },
+  rd_init,
+  wr_init,
+  rd_deinit,
+  wr_deinit,
+  data_read,
+  data_write,
+  nullptr,
+  &stmsdf_args,
+  CET_CHARSET_MS_ANSI, 0       /* CET-REVIEW */
+  , NULL_POS_OPS,
+  nullptr
+};
+
+/* ================================================================== */
+
+#endif /* CSVFMTS_ENABLED */
+
diff --git a/deprecated/stmwpp.cc b/deprecated/stmwpp.cc
new file mode 100644 (file)
index 0000000..f1e962f
--- /dev/null
@@ -0,0 +1,336 @@
+/*
+
+   Support for "Suunto Trek Manager" (STM) WaypointPlus files,
+   see homepage "http://www.suunto.fi" for more details,
+
+   Copyright (C) 2005,2007 Olaf Klein, o.b.klein@gpsbabel.org
+
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 2 of the License, or
+   (at your option) any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+*/
+
+#include <cstdio>                  // for sscanf, snprintf
+#include <cstdlib>                 // for atof, atoi
+#include <cstring>                 // for memset
+#include <ctime>                   // for tm
+
+#include <QDateTime>               // for QDateTime
+#include <QString>                 // for QString
+#include <QTime>                   // for QTime
+#include <QVector>                 // for QVector
+
+#include "defs.h"
+#include "cet_util.h"              // for cet_convert_init
+#include "csv_util.h"              // for csv_lineparse
+#include "gbfile.h"                // for gbfprintf, gbfclose, gbfgetstr, gbfopen, gbfile, gbfputs
+#include "src/core/datetime.h"     // for DateTime
+
+
+#if CSVFMTS_ENABLED
+
+static gbfile* fin, *fout;
+static route_head* track, *route;
+static Waypoint* wpt;
+static short_handle short_h;
+
+#define MYNAME "STMwpp"
+
+#define STM_NOTHING    0
+#define STM_WAYPT      1
+#define STM_TRKPT      2
+#define STM_RTEPT      3
+
+static int track_index;
+static int track_num;
+static int what;
+
+static char* index_opt = nullptr;
+
+static
+QVector<arglist_t> stmwpp_args = {
+  {
+    "index", &index_opt, "Index of route/track to write (if more than one in source)",
+    nullptr, ARGTYPE_INT, "1", nullptr, nullptr
+  },
+};
+
+
+static void
+stmwpp_rd_init(const QString& fname)
+{
+  fin = gbfopen(fname, "rb", MYNAME);
+  track = nullptr;
+  route = nullptr;
+  wpt = nullptr;
+}
+
+static void
+stmwpp_rd_deinit()
+{
+  gbfclose(fin);
+}
+
+static void
+stmwpp_data_read()
+{
+  int line = 0;
+
+  what = STM_NOTHING;
+  char* buff = gbfgetstr(fin);
+  buff = (buff == nullptr) ? (char*) "" : buff;
+
+  if (case_ignore_strncmp(buff, "Datum,WGS 84,WGS 84,", 20) != 0) {
+    fatal(MYNAME ": Invalid GPS datum or not \"WaypointPlus\"\" file!\n");
+  }
+
+  while ((buff = gbfgetstr(fin))) {
+    char* c;
+    int column = -1;
+    struct tm time;
+
+    if ((line++ == 0) && fin->unicode) {
+      cet_convert_init(CET_CHARSET_UTF8, 1);
+    }
+
+    buff = lrtrim(buff);
+    if (*buff == '\0') {
+      continue;
+    }
+
+    wpt = nullptr;
+    memset(&time, 0, sizeof(time));
+    int milliseconds = 0;
+
+    while ((c = csv_lineparse(buff, ",", "", column++))) {
+      int new_what;
+
+      buff = nullptr;
+
+      switch (column) {
+      case 0:
+        if (case_ignore_strcmp(c, "WP") == 0) {
+          new_what = STM_WAYPT;
+        } else if (case_ignore_strcmp(c, "TP") == 0) {
+          new_what = STM_TRKPT;
+        } else {
+          fatal(MYNAME ": Unknown feature \"%s\"!\n", c);
+        }
+
+        if ((what != STM_NOTHING) && (new_what != what)) {
+          fatal(MYNAME ": Only one feature (route or track) is supported by STM!\n");
+        }
+
+        what = new_what;
+        wpt = new Waypoint;
+        break;
+
+      case 1:
+        if (what == STM_TRKPT) {
+          column++;  /* no name -> skip column two */
+        }
+        break;
+
+      case 2:
+        wpt->shortname = QString::fromLatin1(c);
+        break;
+
+      case 3:
+        wpt->latitude = atof(c);
+        break;
+
+      case 4:
+        wpt->longitude = atof(c);
+        break;
+
+      case 5:
+        sscanf(c, "%d/%d/%d", &time.tm_mon, &time.tm_mday, &time.tm_year);
+        break;
+
+      case 6:
+        sscanf(c, "%d:%d:%d.%d", &time.tm_hour, &time.tm_min, &time.tm_sec, &milliseconds);
+        /* makes sense only for recorded trackpoints */
+        if (what != STM_TRKPT) {
+          milliseconds = 0;
+        }
+        break;
+
+      default:
+        break;
+      }
+    }
+    if (wpt != nullptr) {
+      time.tm_year -= 1900;
+      time.tm_mon--;
+      wpt->SetCreationTime(mkgmtime(&time), milliseconds);
+
+      switch (what) {
+      case STM_WAYPT:
+        waypt_add(wpt);
+        if (global_opts.objective == rtedata) {
+          if (route == nullptr) {
+            route = new route_head;
+            route_add_head(route);
+          }
+          route_add_wpt(route, new Waypoint(*wpt));
+        }
+        break;
+
+      case STM_TRKPT:
+        if (track == nullptr) {
+          track = new route_head;
+          track_add_head(track);
+        }
+        track_add_wpt(track, wpt);
+        break;
+      }
+      wpt = nullptr;
+    }
+  }
+}
+
+static void
+stmwpp_rw_init(const QString& fname)
+{
+  fout = gbfopen(fname, "wb", MYNAME);
+  short_h = mkshort_new_handle();
+}
+
+static void
+stmwpp_rw_deinit()
+{
+  mkshort_del_handle(&short_h);
+  gbfclose(fout);
+}
+
+static void
+stmwpp_track_hdr(const route_head*)
+{
+  track_num++;
+}
+
+static void
+stmwpp_write_double(const double val)
+{
+  char buff[64];
+
+  char* c = buff + snprintf(buff, sizeof(buff), "%3.7f", val);
+  while (*--c == '0') {
+    *c = '\0';
+  }
+  if (*c == '.') {
+    *++c = '0';
+  }
+  gbfprintf(fout, "%s,", buff);
+}
+
+static void
+stmwpp_waypt_cb(const Waypoint* waypoint)
+{
+  if (track_index != track_num) {
+    return;
+  }
+
+  QString sn;
+  switch (what) {
+
+  case STM_WAYPT:
+  case STM_RTEPT:
+    if (global_opts.synthesize_shortnames) {
+      sn = mkshort_from_wpt(short_h, waypoint);
+    } else {
+      sn = mkshort(short_h, waypoint->shortname);
+    }
+    gbfprintf(fout, "WP,D,%s,", CSTRc(sn));
+    break;
+
+  case STM_TRKPT:
+    gbfprintf(fout, "TP,D,");
+    break;
+  }
+  stmwpp_write_double(waypoint->latitude);
+  stmwpp_write_double(waypoint->longitude);
+  QString datetime = waypoint->GetCreationTime().toUTC().toString("MM/dd/yyyy,HH:mm:ss");
+  gbfputs(datetime, fout);
+  switch (what) {
+  case STM_WAYPT:
+  case STM_RTEPT:
+    gbfprintf(fout, ".%02d", 0);
+    break;
+  case STM_TRKPT:
+    gbfprintf(fout, ".%03d", waypoint->GetCreationTime().time().msec());
+    break;
+  }
+  gbfprintf(fout, ",\r\n");
+}
+
+static void
+stmwpp_data_write()
+{
+  setshort_length(short_h, 100);
+  setshort_badchars(short_h, ",\r\n");
+  setshort_mustupper(short_h, 0);
+  setshort_mustuniq(short_h, 0);
+  setshort_whitespace_ok(short_h, 1);
+  setshort_repeating_whitespace_ok(short_h, 1);
+
+  track_num = 0;
+  if (index_opt != nullptr) {
+    track_index = atoi(index_opt);
+  } else {
+    track_index = 1;
+  }
+
+  gbfprintf(fout, "Datum,WGS 84,WGS 84,0,0,0,0,0\r\n");
+
+  switch (global_opts.objective) {
+  case wptdata:
+  case unknown_gpsdata:
+    what = STM_WAYPT;
+    track_index = track_num;   /* disable filter */
+    setshort_defname(short_h, "WPT");
+    waypt_disp_all(stmwpp_waypt_cb);
+    break;
+  case rtedata:
+    what = STM_RTEPT;
+    setshort_defname(short_h, "RPT");
+    route_disp_all(stmwpp_track_hdr, nullptr, stmwpp_waypt_cb);
+    break;
+  case trkdata:
+    what = STM_TRKPT;
+    track_disp_all(stmwpp_track_hdr, nullptr, stmwpp_waypt_cb);
+    break;
+  case posndata:
+    fatal(MYNAME ": Realtime positioning not supported.\n");
+    break;
+  }
+}
+
+ff_vecs_t stmwpp_vecs = {
+  ff_type_file,
+  FF_CAP_RW_ALL,
+  stmwpp_rd_init,
+  stmwpp_rw_init,
+  stmwpp_rd_deinit,
+  stmwpp_rw_deinit,
+  stmwpp_data_read,
+  stmwpp_data_write,
+  nullptr,
+  &stmwpp_args,
+  CET_CHARSET_MS_ANSI, 0
+  , NULL_POS_OPS,
+  nullptr
+};
+
+#endif /* CSVFMTS_ENABLED */
+
diff --git a/deprecated/tiger.cc b/deprecated/tiger.cc
new file mode 100644 (file)
index 0000000..a837367
--- /dev/null
@@ -0,0 +1,329 @@
+/*
+    Access to  U.S. Census Bureau "tiger" format.
+
+    Copyright (C) 2002-2014 Robert Lipe, robertlipe+source@gpsbabel.org
+
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+
+ */
+
+#include "defs.h"
+#include "cet_util.h"
+#include "csv_util.h"
+#include <cmath>
+#include <cstdio>
+#include <cstdlib>
+
+static gbfile* file_in, *file_out;
+static short_handle mkshort_handle;
+static short_handle mkshort_whandle;
+
+#define MYNAME "GPSUTIL"
+
+static double maxlat, maxlon, minlat, minlon;
+static int rec_cnt;
+static char* nolabels = nullptr;
+static char* genurl = nullptr;
+static char* suppresswhite = nullptr;
+static char* iconismarker = nullptr;
+static char* snlen = nullptr;
+
+static char* margin  = nullptr;
+static char* xpixels = nullptr;
+static char* ypixels = nullptr;
+static char* oldthresh = nullptr;
+static char* oldmarker  = nullptr;
+static char* newmarker  = nullptr;
+static char* unfoundmarker  = nullptr;
+
+static int short_length;
+static double thresh_days;
+
+/*
+ *   The code bracketed by CLICKMAP is to generate clickable image maps
+ *   for a web browser.   It's functional, but is missing the math to do
+ *   the projection transformations.   Some trig geek can finish that.
+ */
+#if CLICKMAP
+static gbfile* linkf;
+static char* clickmap = NULL;
+#endif
+
+
+static
+QVector<arglist_t> tiger_args = {
+  {
+    "nolabels", &nolabels, "Suppress labels on generated pins",
+    nullptr, ARGTYPE_BOOL, ARG_NOMINMAX, nullptr
+  },
+  {
+    "genurl", &genurl, "Generate file with lat/lon for centering map",
+    nullptr, ARGTYPE_OUTFILE, ARG_NOMINMAX, nullptr
+  },
+  {
+    "margin", &margin, "Margin for map.  Degrees or percentage",
+    "15%", ARGTYPE_FLOAT, ARG_NOMINMAX, nullptr
+  },
+  {
+    "snlen", &snlen, "Max shortname length when used with -s",
+    "10", ARGTYPE_INT, "1", nullptr, nullptr
+  },
+  {
+    "oldthresh", &oldthresh,
+    "Days after which points are considered old",
+    "14", ARGTYPE_INT, ARG_NOMINMAX, nullptr
+  },
+  {
+    "oldmarker", &oldmarker, "Marker type for old points",
+    "redpin", ARGTYPE_STRING, ARG_NOMINMAX, nullptr
+  },
+  {
+    "newmarker", &newmarker, "Marker type for new points",
+    "greenpin", ARGTYPE_STRING, ARG_NOMINMAX, nullptr
+  },
+  {
+    "suppresswhite", &suppresswhite,
+    "Suppress whitespace in generated shortnames",
+    nullptr, ARGTYPE_BOOL, ARG_NOMINMAX, nullptr
+  },
+  {
+    "unfoundmarker", &unfoundmarker, "Marker type for unfound points",
+    "bluepin", ARGTYPE_STRING, ARG_NOMINMAX, nullptr
+  },
+  {
+    "xpixels", &xpixels, "Width in pixels of map",
+    "768", ARGTYPE_INT, ARG_NOMINMAX, nullptr
+  },
+  {
+    "ypixels", &ypixels, "Height in pixels of map",
+    "768", ARGTYPE_INT, ARG_NOMINMAX, nullptr
+  },
+  {
+    "iconismarker", &iconismarker,
+    "The icon description is already the marker", nullptr,
+    ARGTYPE_BOOL, ARG_NOMINMAX, nullptr
+  },
+#if CLICKMAP
+  {
+    "clickmap", &clickmap, "Generate Clickable map web page",
+    NULL, ARGTYPE_BOOL, ARG_NOMINMAX, nullptr
+  },
+#endif
+};
+
+
+static void
+rd_init(const QString& fname)
+{
+  file_in = gbfopen(fname, "rb", MYNAME);
+  mkshort_handle = mkshort_new_handle();
+}
+
+static void
+rd_deinit()
+{
+  gbfclose(file_in);
+  mkshort_del_handle(&mkshort_handle);
+}
+
+static void
+wr_init(const QString& fname)
+{
+  file_out = gbfopen(fname, "w", MYNAME);
+  thresh_days = strtod(oldthresh, nullptr);
+}
+
+static void
+wr_deinit()
+{
+  gbfclose(file_out);
+}
+
+static void
+data_read()
+{
+  double lat,lon;
+  char desc[101];
+  char icon[101];
+  char* ibuf;
+  int line = 0;
+
+  while ((ibuf = gbfgetstr(file_in))) {
+    if ((line++ == 0) && file_in->unicode) {
+      cet_convert_init(CET_CHARSET_UTF8, 1);
+    }
+    if (sscanf(ibuf, "%lf,%lf:%100[^:]:%100[^\n]",
+               &lon, &lat, icon, desc)) {
+      auto* wpt_tmp = new Waypoint;
+
+      wpt_tmp->longitude = lon;
+      wpt_tmp->latitude = lat;
+      wpt_tmp->description = desc;
+      wpt_tmp->shortname = mkshort(mkshort_handle, QString(desc));
+
+      waypt_add(wpt_tmp);
+    }
+  }
+}
+
+static void
+tiger_disp(const Waypoint* wpt)
+{
+  QString pin;
+  double lat = wpt->latitude;
+  double lon = wpt->longitude;
+
+  if (iconismarker) {
+    pin = wpt->icon_descr;
+  } else if (wpt->icon_descr.contains("-unfound")) {
+    pin = unfoundmarker;
+  } else if (wpt->GetCreationTime() > current_time().addSecs(-3600 * 24 * thresh_days)) {
+    pin = newmarker;
+  } else {
+    pin = oldmarker;
+  }
+
+  if (genurl) {
+    if (lat > maxlat) {
+      maxlat = lat;
+    }
+    if (lon > maxlon) {
+      maxlon = lon;
+    }
+    if (lat < minlat) {
+      minlat = lat;
+    }
+    if (lon < minlon) {
+      minlon = lon;
+    }
+  }
+
+  gbfprintf(file_out, "%f,%f:%s", lon, lat, CSTR(pin));
+  if (!nolabels) {
+    QString temp;
+    QString desc = csv_stringclean(wpt->description, ":");
+    if (global_opts.synthesize_shortnames) {
+      temp = desc;
+      desc = mkshort(mkshort_whandle, desc);
+    }
+    gbfprintf(file_out, ":%s", CSTR(desc));
+    if (temp != nullptr) {
+      desc = temp;
+    }
+  }
+  gbfprintf(file_out, "\n");
+}
+
+#if CLICKMAP
+static void
+map_plot(const Waypoint* wpt)
+{
+  static int x,y;
+
+  /* Replace with real math. */
+  x+=10;
+  y+=10;
+
+  gbfprintf(linkf, "<area shape=\"circle\" coords=\"%d,%d,7\" href=\"%s\" alt=\"%s\"\n", x, y, wpt->url, wpt->description);
+}
+#endif /* CLICKMAP */
+
+static double
+dscale(double distance)
+{
+  /*
+   * If we have any specified margin options  factor those in now.
+   * A additional little boundary is helpful because Tiger always
+   * puts the pin above the actual coord and if we don't pad the
+   * top will be clipped.   It also makes the maps more useful to
+   * have a little bit of context around the pins on the border.
+   */
+
+  if (strchr(margin, '%')) {
+    return distance + strtod(margin, nullptr) / 100.0 * distance;
+  } else {
+    return strtod(margin, nullptr) + distance;
+  }
+}
+
+static void
+data_write()
+{
+  maxlat = -9999.0;
+  maxlon = -9999.0;
+  minlat = 9999.0;
+  minlon = 9999.0;
+  rec_cnt = 0;
+
+  short_length = atoi(snlen);
+  mkshort_whandle = mkshort_new_handle();
+
+  if (suppresswhite) {
+    setshort_whitespace_ok(mkshort_whandle, 0);
+  }
+
+  setshort_length(mkshort_whandle, short_length);
+
+  gbfprintf(file_out, "#tms-marker\n");
+  waypt_disp_all(tiger_disp);
+
+  if (genurl) {
+    gbfile* urlf = gbfopen(genurl, "w", MYNAME);
+    double latsz = fabs(maxlat - minlat);
+    double lonsz = fabs(maxlon - minlon);
+
+    /*
+     * Center the map along X and Y axis the midpoint of
+     * our min and max coords each way.
+     */
+    gbfprintf(urlf, "lat=%f&lon=%f&ht=%f&wid=%f",
+              minlat + (latsz/2.0),
+              minlon + (lonsz/2.0),
+              dscale(latsz),
+              dscale(lonsz));
+
+    gbfprintf(urlf, "&iwd=%s&iht=%s", xpixels, ypixels);
+    gbfclose(urlf);
+#if CLICKMAP
+    if (clickmap) {
+      linkf = gbfopen(clickmap, "w", MYNAME);
+      gbfprintf(linkf, "<map name=\"map\">\n");
+      waypt_disp_all(map_plot);
+      gbfprintf(linkf, "</map>\n");
+      gbfclose(linkf);
+      linkf = NULL;
+    }
+#endif
+  }
+
+  mkshort_del_handle(&mkshort_whandle);
+}
+
+
+ff_vecs_t tiger_vecs = {
+  ff_type_file,
+  FF_CAP_RW_WPT,
+  rd_init,
+  wr_init,
+  rd_deinit,
+  wr_deinit,
+  data_read,
+  data_write,
+  nullptr,
+  &tiger_args,
+  CET_CHARSET_ASCII, 0 /* CET-REVIEW */
+  , NULL_POS_OPS,
+  nullptr
+};
diff --git a/deprecated/vidaone.cc b/deprecated/vidaone.cc
new file mode 100644 (file)
index 0000000..d0fa519
--- /dev/null
@@ -0,0 +1,154 @@
+/*
+
+    Support for VidaOne GPS for Pocket PC (.gpb) files
+
+    Copyright (C) 2008 Olaf Klein, o.b.klein@gpsbabel.org
+
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+
+ */
+
+/*
+   Simple layout:
+
+struct
+{
+       double dLatitude
+       double dLongitude
+       float fReserved
+};
+*/
+
+#include "defs.h"
+#include <cmath>
+#include <cstdlib>
+
+#define MYNAME "vidaone"
+
+#define VIDAONE_VER    "ver"
+
+static char* vidaone_opt_ver;
+static int vidaone_ver;
+
+static
+QVector<arglist_t> vidaone_args = {
+  {
+    VIDAONE_VER, &vidaone_opt_ver,
+    "Version of VidaOne file to read or write (1 or 2)",
+    "1", ARGTYPE_INT, "1", "2", nullptr
+  },
+};
+
+static gbfile* fin, *fout;
+
+/*******************************************************************************
+* %%%        global callbacks called by gpsbabel main process              %%% *
+*******************************************************************************/
+
+static void
+vidaone_rd_init(const QString& fname)
+{
+  vidaone_ver = atoi(vidaone_opt_ver);
+  fin = gbfopen(fname, "rb", MYNAME);
+}
+
+static void
+vidaone_rd_deinit()
+{
+  gbfclose(fin);
+}
+
+static void
+vidaone_read()
+{
+  route_head* trk = nullptr;
+
+  while (! gbfeof(fin)) {
+    auto* wpt = new Waypoint;
+
+    wpt->latitude = gbfgetdbl(fin);
+    wpt->longitude = gbfgetdbl(fin);
+    if (vidaone_ver >= 2) {
+      wpt->altitude = gbfgetflt(fin);
+    }
+    (void) gbfgetflt(fin);
+
+    /* Only one basic check of data integrity */
+    if ((fabs(wpt->latitude) > 90) || (fabs(wpt->longitude) > 180)) {
+      fatal(MYNAME ": Latitude and/or longitude out of range.\n");
+    }
+
+    if (!trk) {
+      trk = new route_head;
+      track_add_head(trk);
+    }
+
+    track_add_wpt(trk, wpt);
+  }
+}
+
+static void
+vidaone_wr_init(const QString& fname)
+{
+  vidaone_ver = atoi(vidaone_opt_ver);
+  fout = gbfopen(fname, "wb", MYNAME);
+}
+
+static void
+vidaone_wr_deinit()
+{
+  gbfclose(fout);
+}
+
+static void
+vidaone_trkpt(const Waypoint* wpt)
+{
+  gbfputdbl(wpt->latitude, fout);
+  gbfputdbl(wpt->longitude, fout);
+  if (vidaone_ver >= 2) {
+    gbfputflt(wpt->altitude, fout);
+  }
+  gbfputflt(0, fout);
+}
+
+static void
+vidaone_write()
+{
+  track_disp_all(nullptr, nullptr, vidaone_trkpt);
+}
+
+/**************************************************************************/
+
+ff_vecs_t vidaone_vecs = {
+  ff_type_file,
+  {
+    ff_cap_none                        /* waypoints */,
+    (ff_cap)(ff_cap_read | ff_cap_write)       /* tracks */,
+    ff_cap_none                        /* routes */
+  },
+  vidaone_rd_init,
+  vidaone_wr_init,
+  vidaone_rd_deinit,
+  vidaone_wr_deinit,
+  vidaone_read,
+  vidaone_write,
+  nullptr,
+  &vidaone_args,
+  CET_CHARSET_UTF8, 1
+  , NULL_POS_OPS,
+  nullptr
+};
+
+/**************************************************************************/
diff --git a/deprecated/vitosmt.cc b/deprecated/vitosmt.cc
new file mode 100644 (file)
index 0000000..fa9288e
--- /dev/null
@@ -0,0 +1,335 @@
+/*
+    Read Vito Navigator .SMT tracks
+
+    Copyright (C) 2005 Etienne TASSE
+
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+
+ */
+
+#include "defs.h"
+#include "grtcirc.h"
+#include <cerrno>
+#include <cmath>
+
+#define MYNAME "vitosmt"
+
+static gbfile* infile = nullptr;
+static gbfile* ofs  =nullptr;
+static long count = 0;
+
+const long vitosmt_version = 2;
+const long vitosmt_subversion = 1000;
+const size_t vitosmt_headersize = 24;
+const size_t vitosmt_datasize = 64;
+
+static unsigned char*
+ReadRecord(gbfile* f, gbsize_t size)
+{
+  auto* result = (unsigned char*) xmalloc(size);
+
+  gbfread(result, size, 1, f);
+  return result;
+}
+
+static void
+WriteDouble(void* ptr, double d)
+{
+  unsigned char result[9]="\0\0\0\0\0\0\0\0";
+  le_write_double(result,d);
+  memcpy(ptr, result, 8);
+}
+
+
+static void
+rd_init(const QString& fname)
+{
+  infile = gbfopen_le(fname, "rb", MYNAME);
+}
+
+static void
+rd_deinit()
+{
+  gbfclose(infile);
+}
+
+static void
+vitosmt_read()
+{
+  route_head* rte = nullptr;
+  int serial = 0;
+
+  /*
+   * 24 bytes header
+   */
+  long version = gbfgetint32(infile); /* 2 */
+  long subversion = gbfgetint32(infile); /* 1000 */
+  count = gbfgetint32(infile); /* n */
+  long check1 = gbfgetint32(infile); /* 0 */
+  long check2 = gbfgetint32(infile); /* not sure */
+  (void) check2; // silence warning.
+  long check3 = gbfgetint32(infile); /* n */
+
+  if (version!=vitosmt_version) {
+
+    fatal("%s (%d) reading file.  Unsupported version %ld.%ld\n",
+          MYNAME, __LINE__, version, subversion);
+  }
+
+  if (subversion!=vitosmt_subversion) {
+    warning("%s (%d) reading file.  Unsafe version %ld.%ld\n",
+            MYNAME, __LINE__, version, subversion);
+  }
+
+  if ((count!=check3) ||
+      (check1!=count-1) ||
+      (check3!=count)) {
+
+    fatal("%s (%d) reading file. Invalid file header\n",
+          MYNAME, __LINE__);
+
+  }
+
+  while (count) {
+    /*
+     * 64 bytes of data
+     */
+    if (gbfeof(infile)||gbferror(infile)) {
+      warning("%s (%d) reading file.  Unexpected end of file %s\n",
+              MYNAME, __LINE__, strerror(errno));
+      break;
+    }
+    double latrad = gbfgetdbl(infile); /* WGS84 latitude in radians */
+    double lonrad = gbfgetdbl(infile); /* WGS84 longitude in radians */
+    double elev = gbfgetdbl(infile); /* elevation in meters */
+    unsigned char* timestamp = ReadRecord(infile,5); /* UTC time yr/mo/dy/hr/mi */
+    double seconds = gbfgetdbl(infile); /* seconds */
+    double speed = gbfgetdbl(infile);    /* speed in knots */
+    double course = gbfgetdbl(infile); /* course in degrees */
+    double pdop = gbfgetdbl(infile); /* dilution of precision */
+    unsigned char gpsfix = gbfgetc(infile); /* fix type x08,x10, x20 */
+    unsigned char gpsvalid = gbfgetc(infile); /* fix is valid */
+    unsigned char gpssats = gbfgetc(infile); /* number of sats */
+
+    auto* wpt_tmp = new Waypoint;
+
+    wpt_tmp->latitude = DEG(latrad);
+    wpt_tmp->longitude = DEG(lonrad);
+    wpt_tmp->altitude = elev;
+
+    wpt_tmp->SetCreationTime(QDateTime(
+      QDate(timestamp[0] + 2000, timestamp[1], timestamp[2]),
+      QTime(timestamp[3], timestamp[4]),
+      Qt::UTC).addMSecs(lround(seconds*1000.0)));
+
+    wpt_tmp->shortname = QString::asprintf("WP%04d", ++serial);
+
+    WAYPT_SET(wpt_tmp, speed, KNOTS_TO_MPS(speed)); /* meters per second */
+    WAYPT_SET(wpt_tmp, course, course);
+    wpt_tmp->pdop = pdop;
+
+    /*
+     GPS Fix data
+    */
+    if (gpsvalid&0x7) {
+      if (gpsfix==0) {
+        wpt_tmp->fix  =fix_none;
+      }
+      if (gpsfix&0x8) {
+        wpt_tmp->fix  =fix_2d;
+      } else if (gpsfix&0x10) {
+        wpt_tmp->fix  =fix_3d;
+      } else if (gpsfix&0x20) {
+        wpt_tmp->fix  =fix_dgps;
+      } else {
+        wpt_tmp->fix  =fix_unknown;
+      }
+
+      /* <sat> */
+      wpt_tmp->sat = gpssats;
+    } else {
+      wpt_tmp->fix  =fix_unknown;
+    }
+
+    if (doing_wpts) { /* process as waypoints */
+      waypt_add(wpt_tmp);
+    } else if (doing_rtes) { /* process as route */
+      if (rte == nullptr) {
+          rte = new route_head;
+        route_add_head(rte);
+      }
+      route_add_wpt(rte, wpt_tmp);
+    } else {  /* default track mode */
+      if (rte == nullptr) {
+          rte = new route_head;
+        track_add_head(rte);
+      }
+      track_add_wpt(rte, wpt_tmp);
+    }
+
+    xfree(timestamp);
+
+    count--;
+  }
+}
+
+static void
+wr_init(const QString& fname)
+{
+  warning(MYNAME " write: format is experimental and may crash Vito Navigator II.\n");
+  ofs = gbfopen_le(fname, "wb", MYNAME);
+}
+
+static void
+wr_deinit()
+{
+  gbfclose(ofs);
+
+}
+
+static void
+vitosmt_waypt_pr(const Waypoint* waypointp)
+{
+  size_t  position =0;
+  double  seconds  =0;
+
+  ++count;
+  auto*  workbuffer = (unsigned char*) xcalloc(vitosmt_datasize,1);
+
+  WriteDouble(&workbuffer[position], RAD(waypointp->latitude));
+  position += sizeof(double);
+  WriteDouble(&workbuffer[position], RAD(waypointp->longitude));
+  position += sizeof(double);
+  if (waypointp->altitude-1 > unknown_alt) {
+    WriteDouble(&workbuffer[position], waypointp->altitude);
+  }
+  position += sizeof(double);
+  QDate date(waypointp->GetCreationTime().date());
+  QTime time(waypointp->GetCreationTime().time());
+  workbuffer[position++] = date.year()-100;
+  workbuffer[position++] = date.month();
+  workbuffer[position++] = date.day();
+  workbuffer[position++] = time.hour();
+  workbuffer[position++] = time.minute();
+
+  WriteDouble(&workbuffer[position], seconds);
+  position += sizeof(double);
+
+  /* speed */
+  if (waypointp->speed>0) {
+    WriteDouble(&workbuffer[position], MPS_TO_MPH(waypointp->speed));
+  }
+  position += sizeof(double);
+
+  /* course */
+  if ((waypointp->course>=-360.0)&&(waypointp->course<=360.0)) {
+    WriteDouble(&workbuffer[position], waypointp->course);
+  }
+  position += sizeof(double);
+
+  /* pdop */
+  if (waypointp->pdop>0) {
+    WriteDouble(&workbuffer[position], waypointp->pdop);
+  }
+  position += sizeof(double);
+
+
+  /* fix type */
+  switch (waypointp->fix) {
+  case fix_2d:
+    workbuffer[position++] = 0x08;
+    break;
+  case fix_3d:
+    workbuffer[position++] = 0x10;
+    break;
+  case fix_dgps:
+    workbuffer[position++] = 0x20;
+    break;
+  default:
+    workbuffer[position++] = 0;
+    break;
+  }
+
+  /* Assume position is valid */
+  workbuffer[position++] = 0x07;
+
+  if ((waypointp->sat>0)&&(waypointp->sat<128)) {
+    workbuffer[position++] = waypointp->sat;
+  } else {
+    workbuffer[position++] = 0;
+  }
+
+  (void)gbfwrite(workbuffer,vitosmt_datasize,1,ofs);
+
+  xfree(workbuffer);
+}
+
+
+static void
+vitosmt_write()
+{
+  auto* workbuffer = (unsigned char*) xcalloc(vitosmt_headersize,1);
+
+  count = 0;
+
+  /* leave a spacer for the header */
+  memset(workbuffer,0,vitosmt_headersize);
+  (void)gbfwrite(workbuffer,vitosmt_headersize,1,ofs);
+
+  if (doing_wpts) { /* process as waypoints */
+    waypt_disp_all(vitosmt_waypt_pr);
+  } else if (doing_rtes) { /* process as route */
+    route_disp_all(nullptr, nullptr, vitosmt_waypt_pr);
+  } else { /* default track mode */
+    track_disp_all(nullptr, nullptr, vitosmt_waypt_pr);
+  }
+
+
+  /* write the complete the header */
+  size_t position = 0;
+  le_write32(&workbuffer[position],vitosmt_version);
+  position += sizeof(uint32_t);
+  le_write32(&workbuffer[position],vitosmt_subversion);
+  position += sizeof(uint32_t);
+  le_write32(&workbuffer[position],count);
+  position += sizeof(uint32_t);
+  le_write32(&workbuffer[position],0);
+  position += sizeof(uint32_t);
+  le_write32(&workbuffer[position],count-1);
+  position += sizeof(uint32_t);
+  le_write32(&workbuffer[position],count);
+  position += sizeof(uint32_t);
+
+  gbfrewind(ofs);
+  (void)gbfwrite(workbuffer,vitosmt_headersize,1,ofs);
+
+  xfree(workbuffer);
+}
+
+ff_vecs_t vitosmt_vecs = {
+  ff_type_file,
+  FF_CAP_RW_ALL,
+  rd_init,
+  wr_init,
+  rd_deinit,
+  wr_deinit,
+  vitosmt_read,
+  vitosmt_write,
+  nullptr,
+  nullptr,
+  CET_CHARSET_UTF8, 1 /* do nothing | CET-REVIEW */
+  , NULL_POS_OPS,
+  nullptr
+};
diff --git a/deprecated/vitovtt.cc b/deprecated/vitovtt.cc
new file mode 100644 (file)
index 0000000..a1fc2ad
--- /dev/null
@@ -0,0 +1,127 @@
+/*
+    Read Vito SmartMap .vtt tracks
+
+    Copyright (C) 2007 Jeremy Ehrhardt, jeremye@caltech.edu
+
+based on vitostc.c, which is
+Copyright (C) 2005 Etienne TASSE
+
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+
+ */
+
+#include "defs.h"
+#include <cmath>
+
+#define MYNAME "vitovtt"
+
+#define TM_YEAR_ZERO 1900
+#define TM_MONTH_ZERO 1
+
+static gbfile* infile = nullptr;
+static int count = 0;
+
+static const int vitovtt_version = 3;
+// static const size_tvitovtt_headersize = 16;
+// static const size_tvitovtt_datasize = 32;
+
+static const double vitovtt_latitudescale = 20000000.0;
+static const double vitovtt_longitudescale = 10000000.0;
+static const int vitovtt_secondscale = 30000000;
+static const int vitovtt_microsecondscale = 30;
+
+static void
+rd_init(const QString& fname)
+{
+  infile = gbfopen_le(fname, "rb", MYNAME);
+}
+
+static void
+rd_deinit()
+{
+  gbfclose(infile);
+}
+
+static void
+vitovtt_read()
+{
+  struct tm tmStruct;
+
+  memset(&tmStruct, 0, sizeof(tmStruct));
+
+  auto* rte = new route_head;
+  track_add_head(rte);
+
+  /* Read the header. */
+  int version = gbfgetint32(infile);
+  count = gbfgetint32(infile);
+
+  if (version != vitovtt_version) {
+    fatal("%s (%d) reading file.  Unsupported version %d\n",
+          MYNAME, __LINE__, version);
+  }
+
+  while (count) {
+    /* Read an entry. */
+    int scaled_lat = gbfgetint32(infile);
+    int scaled_lon = gbfgetint32(infile);
+    double altitude = gbfgetflt(infile);
+    tmStruct.tm_year = gbfgetint16(infile) - TM_YEAR_ZERO;
+    tmStruct.tm_mon = gbfgetc(infile) - TM_MONTH_ZERO;
+    tmStruct.tm_mday = gbfgetc(infile);
+    tmStruct.tm_hour = gbfgetc(infile);
+    tmStruct.tm_min = gbfgetc(infile);
+    int scaled_sec = gbfgetint32(infile);
+    double speed = gbfgetflt(infile);
+    int course = gbfgetint16(infile);
+    int status = gbfgetint32(infile);
+
+    auto* wpt_tmp = new Waypoint;
+
+    wpt_tmp->latitude= scaled_lat / vitovtt_latitudescale;
+    wpt_tmp->longitude= scaled_lon / vitovtt_longitudescale;
+    wpt_tmp->altitude= altitude;
+
+    tmStruct.tm_sec = scaled_sec / vitovtt_secondscale;
+    int microseconds = (scaled_sec % vitovtt_secondscale) / vitovtt_microsecondscale;
+    wpt_tmp->SetCreationTime(mkgmtime(&tmStruct), lround(microseconds/1000.0));
+    /*
+     * TODO: interpret speed, course, status
+     */
+    (void) speed;
+    (void) course;
+    (void) status;
+
+    track_add_wpt(rte, wpt_tmp);
+
+    count--;
+  }
+}
+
+ff_vecs_t vitovtt_vecs = {
+  ff_type_file,
+  { ff_cap_none, ff_cap_read, ff_cap_none },
+  rd_init,
+  nullptr,
+  rd_deinit,
+  nullptr,
+  vitovtt_read,
+  nullptr,
+  nullptr,
+  nullptr,
+  CET_CHARSET_UTF8, 1/* do nothing | CET-REVIEW */
+  , NULL_POS_OPS,
+  nullptr
+};
diff --git a/deprecated/vpl.cc b/deprecated/vpl.cc
new file mode 100644 (file)
index 0000000..1a1efa7
--- /dev/null
@@ -0,0 +1,230 @@
+/*
+
+    Reader for Honda/Acura (Alpine) Navigation System VP Log (VPL) files
+
+       Copyright (C) 2009      Chris Tracy, gpsbabel@adiemus.org
+    Copyright (C) 2005  Robert Lipe, robertlipe+source@gpsbabel.org
+
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+
+*/
+
+/*
+       With logging enabled (Diagnostic Menu | Functional Setup | Log Data), VPL
+       files are written to the PC Card.  The files themselves are written out as
+       ASCII files, mostly containing lines of hexadecimal characters.  The format
+       seems similar to NMEA, with various sentences carrying different types of
+       information.  For our purposes, the only sentence that matters is the '75'
+       sentence.  For example:
+
+75700241FA59FB242CD500CF041984991E0B0A0C09060613064509060613064424824D68FF00000800051C000271
+00--1111111122222222333344445555--667788999999999999AAAAAAAAAAAA--------------------------XX
+
+0 - Sentence type
+1 - Latitude in hex (signed, divide by 0xE1000 for decimal degrees)
+       0241FA59 -> 37878361 / 0xE1000 = 41.100652
+2 - Longitude in hex (signed, divide by 0xE1000 for decimal degrees)
+       FB242CD5 -> -81515307 / 0xE1000 = -88.449769
+3 - Altitude (signed, meters)
+       00CF -> 207
+4 - Speed (divide by 0x10 for MPH)
+       0419 -> 1049 / 0x10 = 65.5625
+5 - Heading (multiply by 360/65535 to constrain to 0 - 360 degrees)
+       8499 -> 33945 * (360/65535) = 186.47
+6 - Number of sats
+       0B -> 11
+7 - HDOP (divide by 8)
+       0A -> 10 / 8 = 1.25
+8 - VDOP (divide by 8)
+       0C -> 12 / 8 = 1.5
+9 - Date and Time (YYMMDDHHMMSS)
+       090606130645 = June 6, 2009 13:06:45
+A - Previous line date and time (?)
+       090606130644 = June 6, 2009 13:06:44
+X - Checksum (xor, ala NMEA)
+
+***********************************
+* Unused, but (at least partially) decoded sentences
+
+******
+0D - Yaw Gyro (This field is not currently decoded herein)
+       This field is written 25 times per second.  It contains the raw values
+       from the yaw gyro.  Positive values for right turns, negative values
+       for left turns.
+
+0D00FEFA09
+00??1111CC
+
+0 - Sentence Type
+? - An unknown field with observed values between 0 and 3.
+1 - Yaw Gyro value
+C - Checksum
+
+******
+31 - Distance Traveled
+       This field is written once a second.  It contains the number of
+       meters traveled since the navigation system was last turned on.
+
+310000117050
+0011111111CC
+
+0 - Sentence Type
+1 - Distance Traveled in Meters
+C - Checksum
+
+******
+35 - Raw Position
+       This field is written 5 times per second.  It contains Latitude
+       and Longitude, as well as two currently unknown angular values.
+
+35CFBB5CBC1744CB1BD9023308C2
+00111111112222222233334444CC
+
+0 - Sentence Type
+1 - Longitude (divide by 0x8CA000 for decimal degrees)
+2 - Latitude (divide by 0x8CA000 for decimal degrees)
+3 - Unknown angular value (multiply by 360/65535)
+4 - Unknown angular value (multiply by 360/65535)
+C - Checksum
+
+*/
+
+/*
+       TODO:
+               - Implement checksum verification
+ */
+
+#include "defs.h"
+#include <cstdio> /* for sscanf */
+
+#define MYNAME "vpl"
+
+static void vpl_parse_75_sentence(const char*);
+
+static
+QVector<arglist_t> vpl_args = {
+};
+
+static gbfile* vpl_file_in;
+static route_head* track_head;
+
+/*******************************************************************************
+* %%%        global callbacks called by gpsbabel main process              %%% *
+*******************************************************************************/
+
+static void
+vpl_rd_init(const QString& fname)
+{
+  vpl_file_in = gbfopen(fname, "r", MYNAME);
+}
+
+static void
+vpl_rd_deinit()
+{
+  gbfclose(vpl_file_in);
+}
+
+static void
+vpl_read()
+{
+  char* ibuf;
+
+  // Set up a track
+  if (track_head == nullptr) {
+    track_head = new route_head;
+    track_add_head(track_head);
+  }
+
+  while ((ibuf = gbfgetstr(vpl_file_in))) {
+    if (strncmp(ibuf, "75", 2) == 0) {
+      vpl_parse_75_sentence(ibuf);
+    }
+  }
+}
+
+/*******************************************************************************
+* Local Functions
+*******************************************************************************/
+
+void
+vpl_parse_75_sentence(const char* ibuf)
+{
+  uint32_t ymd, hms;
+  int32_t lat_raw, lon_raw;
+  int16_t alt, speed_raw;
+  uint16_t hdg_raw;
+  uint8_t sats, hdop_raw, vdop_raw;
+  struct tm tm;
+
+  // The files have DOS line endings (CR/LF) but we don't care, because we
+  // don't read to the end.
+  sscanf(ibuf, "75%*2c%8X%8X%4hX%4hX%4hX%*2c%2hhX%2hhX%2hhX%6u%6u",
+         &lat_raw, &lon_raw, &alt, &speed_raw, &hdg_raw, &sats, &hdop_raw, &vdop_raw,
+         &ymd, &hms);
+
+  tm.tm_sec = hms % 100;
+  hms /= 100;
+  tm.tm_min = hms % 100;
+  hms /= 100;
+  tm.tm_hour = hms % 100;
+
+  tm.tm_mday = ymd % 100;
+  ymd /= 100;
+  tm.tm_mon = ymd % 100;
+  ymd /= 100;
+  tm.tm_year = ymd % 100 + 100;
+
+  auto* waypt = new Waypoint;
+
+  // Lat/Lon are both stored *0xE1000 which we have to divide out
+  // for decimal degrees
+  waypt->latitude  = lat_raw / (double) 0xE1000;
+  waypt->longitude = lon_raw / (double) 0xE1000;
+  waypt->altitude  = alt;
+  waypt->sat       = sats;
+  // Speed comes in (MPH x 0x10) which we have to convert to m/s
+  WAYPT_SET(waypt, speed, (speed_raw / (double) 0x10) * 0.44704);
+  WAYPT_SET(waypt, course, hdg_raw * (360.0f/65535.0f));
+  waypt->hdop      = hdop_raw / 8.0;
+  waypt->vdop      = vdop_raw / 8.0;
+
+  waypt->SetCreationTime(mkgmtime(&tm));
+
+  track_add_wpt(track_head, waypt);
+}
+
+/**************************************************************************/
+
+ff_vecs_t vpl_vecs = {
+  ff_type_file,
+  {
+    ff_cap_none                /* waypoints */,
+    ff_cap_read                /* tracks */,
+    ff_cap_none                /* routes */
+  },
+  vpl_rd_init,
+  nullptr,
+  vpl_rd_deinit,
+  nullptr,
+  vpl_read,
+  nullptr,
+  nullptr,
+  &vpl_args,
+  CET_CHARSET_ASCII, /* ascii is the expected character set */
+  1                   /* fixed, can't be changed through command line parameter */
+  , NULL_POS_OPS,
+  nullptr
+};
+/**************************************************************************/
diff --git a/deprecated/wfff_xml.cc b/deprecated/wfff_xml.cc
new file mode 100644 (file)
index 0000000..3f082d7
--- /dev/null
@@ -0,0 +1,240 @@
+/*
+    Copyright (C) 2006 Etienne Tasse   etasse@yahoo.com
+
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+
+ */
+
+#include "defs.h"
+#include "xmlgeneric.h"
+#include <QXmlStreamAttributes>
+#include <cstdio>
+
+/* argument storage */
+static char*   aicicon =nullptr;
+static char*   aioicon =nullptr;
+static char*   ahcicon =nullptr;
+static char*   ahoicon =nullptr;
+static char*   snmac   =nullptr;
+
+static
+QVector<arglist_t> wfff_xml_args = {
+  {
+    "aicicon", &aicicon, "Infrastructure closed icon name",
+    "Red Square", ARGTYPE_STRING, ARG_NOMINMAX, nullptr
+  },
+  {
+    "aioicon", &aioicon, "Infrastructure open icon name",
+    "Green Square", ARGTYPE_STRING, ARG_NOMINMAX, nullptr
+  },
+  {
+    "ahcicon", &ahcicon, "Ad-hoc closed icon name",
+    "Red Diamond", ARGTYPE_STRING, ARG_NOMINMAX, nullptr
+  },
+  {
+    "ahoicon", &ahoicon, "Ad-hoc open icon name",
+    "Green Diamond", ARGTYPE_STRING, ARG_NOMINMAX, nullptr
+  },
+  {"snmac", &snmac, "Shortname is MAC address", nullptr, ARGTYPE_BOOL, ARG_NOMINMAX, nullptr },
+};
+
+#define xfreez(p) { if (p) xfree(p); p=0; }
+
+#define MYNAME "wfff_xml"
+
+static xg_callback     wfff_s,      wfff_e;
+static xg_callback     wfff_wep,    wfff_mac,    wfff_type;
+static xg_callback     wfff_ssid,   wfff_chan;
+static xg_callback     wfff_mnrssi, wfff_mxrssi;
+static xg_callback     wfff_first,  wfff_last;
+static xg_callback     wfff_hdop,   wfff_lat,    wfff_lon;
+
+static
+xg_tag_mapping loc_map[] = {
+  { wfff_s,            cb_start,       "/DocumentElement/AP"                   },
+  { wfff_e,            cb_end,         "/DocumentElement/AP"                   },
+  { wfff_wep,  cb_cdata,       "/DocumentElement/AP/WEP"               },
+  { wfff_mac,  cb_cdata,       "/DocumentElement/AP/MAC"               },
+  { wfff_ssid,         cb_cdata,       "/DocumentElement/AP/SSID"              },
+  { wfff_type,         cb_cdata,       "/DocumentElement/AP/Type"              },
+  { wfff_mnrssi,       cb_cdata,       "/DocumentElement/AP/MinRSSI"   },
+  { wfff_mxrssi,       cb_cdata,       "/DocumentElement/AP/MaxRSSI"   },
+  { wfff_chan,         cb_cdata,       "/DocumentElement/AP/Channel"   },
+  { wfff_first,        cb_cdata,       "/DocumentElement/AP/FirstSeen" },
+  { wfff_last,         cb_cdata,       "/DocumentElement/AP/LastSeen"  },
+  { wfff_hdop,         cb_cdata,       "/DocumentElement/AP/HDOP"              },
+  { wfff_lat,  cb_cdata,       "/DocumentElement/AP/Lat"               },
+  { wfff_lon,  cb_cdata,       "/DocumentElement/AP/Lon"               },
+  { nullptr,(xg_cb_type)0,nullptr }
+};
+
+/* work variables for wfff_xxx */
+static QString ap_mac;
+static QString ap_ssid;
+static QString ap_type;
+static QString ap_wep;
+static int             ap_chan         =0;
+static time_t  ap_first        =0;
+static QString         ap_last;
+static float   ap_mnrssi       =0.0;
+static float   ap_mxrssi       =0.0;
+static float   ap_hdop         =0.0;
+static double  ap_lat          =0.0;
+static double  ap_lon          =0.0;
+
+/*     Start of AP block */
+void wfff_s(xg_string, const QXmlStreamAttributes*)
+{
+  ap_mnrssi=0.0;
+  ap_mxrssi=0.0;
+  ap_chan=0;
+  ap_hdop=0.0;
+  ap_first=0;
+  ap_last=QString();
+  ap_lat=0.0;
+  ap_lon=0.0;
+}
+
+void wfff_mac(const QString& args, const QXmlStreamAttributes*) {
+  ap_mac = args;
+}
+void wfff_ssid(const QString& args, const QXmlStreamAttributes*) {
+  ap_ssid = args;
+}
+void wfff_type(const QString& args, const QXmlStreamAttributes*) {
+  ap_type = args;
+}
+void wfff_mnrssi(const QString& args, const QXmlStreamAttributes*) {
+  ap_mnrssi = args.toDouble();
+}
+void wfff_mxrssi(const QString& args, const QXmlStreamAttributes*) {
+  ap_mxrssi = args.toDouble();
+}
+void wfff_chan(const QString& args, const QXmlStreamAttributes*) {
+  ap_chan = args.toInt();
+}
+void wfff_first(const QString& args, const QXmlStreamAttributes*) {
+  ap_first = xml_parse_time(args).toTime_t();
+}
+void wfff_last(const QString& args, const QXmlStreamAttributes*) {
+  ap_last = args;
+}
+void wfff_wep(const QString& args, const QXmlStreamAttributes*) {
+  ap_wep = args;
+}
+void wfff_hdop(const QString& args, const QXmlStreamAttributes*) {
+  ap_hdop = args.toDouble();
+}
+void wfff_lat(const QString& args, const QXmlStreamAttributes*) {
+  ap_lat = args.toDouble();
+}
+void wfff_lon(const QString& args, const QXmlStreamAttributes*) {
+  ap_lon = args.toDouble();
+}
+
+/*     End of AP Block, set waypoint and add */
+static long tosscount=0;
+
+void wfff_e(xg_string, const QXmlStreamAttributes*)
+{
+  char         desc[255]       ="\0";
+
+  if ((ap_hdop>=1)&&(ap_hdop<50)) { // Discard invalid GPS fix
+    auto*      wpt_tmp = new Waypoint;
+
+    if (snmac) {
+      wpt_tmp->shortname = ap_mac;
+    } else {
+      wpt_tmp->shortname = ap_ssid;
+    }
+
+    snprintf(desc, sizeof desc,
+             "%s/%s/WEP %s/Ch %d/%2.0fdB/%2.0fdB/%s",
+             snmac?CSTR(ap_ssid):CSTR(ap_mac), CSTR(ap_type), CSTR(ap_wep),
+             ap_chan, ap_mnrssi, ap_mxrssi, CSTR(ap_last));
+    wpt_tmp->description = desc;
+
+    wpt_tmp->latitude = ap_lat;
+    wpt_tmp->longitude = ap_lon;
+    wpt_tmp->hdop = ap_hdop;
+    wpt_tmp->altitude = unknown_alt;
+    wpt_tmp->fix = fix_unknown;
+
+    QString ap_wep_(ap_wep);
+    QString ap_type_(ap_type);
+    if (ap_wep_.startsWith("on", Qt::CaseInsensitive)) {
+      if (ap_type_.startsWith("AP", Qt::CaseInsensitive)) {
+        wpt_tmp->icon_descr = aicicon; /* Infra Closed */
+      } else {
+        wpt_tmp->icon_descr = ahcicon; /* AdHoc Closed */
+      }
+    } else {
+      if (ap_type_.startsWith("AP", Qt::CaseInsensitive)) {
+        wpt_tmp->icon_descr = aioicon; /* Infra Open */
+      } else {
+        wpt_tmp->icon_descr = ahoicon; /* AdHoc Open */
+      }
+    }
+
+    wpt_tmp->SetCreationTime(ap_first);
+
+    waypt_add(wpt_tmp);
+
+  } else {
+    tosscount++;
+  }
+}
+
+static void
+wfff_xml_rd_init(const QString& fname)
+{
+  tosscount = 0;
+
+  xml_init(fname, loc_map, nullptr);
+}
+
+void
+static wfff_xml_read()
+{
+  xml_read();
+}
+
+void
+static wfff_xml_rd_deinit()
+{
+  xml_deinit();
+
+  if (tosscount) {
+    warning("Warning: %s reading file. Threw away %ld invalid entries.\n",
+            MYNAME, tosscount);
+  }
+
+}
+
+ff_vecs_t wfff_xml_vecs = {
+  ff_type_file,
+  {ff_cap_read, ff_cap_none, ff_cap_none},
+  wfff_xml_rd_init,
+  nullptr,
+  wfff_xml_rd_deinit,
+  nullptr,
+  wfff_xml_read,
+  nullptr,
+  nullptr,
+  &wfff_xml_args,
+  CET_CHARSET_UTF8, 0,
+  NULL_POS_OPS,
+  nullptr
+};
diff --git a/deprecated/yahoo.cc b/deprecated/yahoo.cc
new file mode 100644 (file)
index 0000000..8b02367
--- /dev/null
@@ -0,0 +1,82 @@
+/*
+    Read Yahoo Geocoded files.
+
+    Copyright (C) 2005 Robert Lipe, robertlipe+source@gpsbabel.org
+
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+
+ */
+
+
+#include <QXmlStreamAttributes>         // for QXmlStreamAttributes
+
+#include "defs.h"
+#include "yahoo.h"
+#include "xmlgeneric.h"                 // for xg_string, build_xg_tag_map, xml_deinit, xml_init, xml_read
+
+
+#define MYNAME "yahoo"
+
+void
+YahooFormat::rd_init(const QString& fname)
+{
+  xml_init(fname, build_xg_tag_map(this, gl_map), nullptr, nullptr, nullptr, true);
+}
+
+void
+YahooFormat::read()
+{
+  xml_read();
+}
+
+void
+YahooFormat::rd_deinit()
+{
+  xml_deinit();
+}
+
+void
+YahooFormat::wpt_s(xg_string, const QXmlStreamAttributes*)
+{
+  wpt_tmp = new Waypoint;
+}
+
+void
+YahooFormat::wpt_e(xg_string, const QXmlStreamAttributes*)
+{
+  waypt_add(wpt_tmp);
+  wpt_tmp = nullptr;
+}
+
+void
+YahooFormat::wpt_lat(xg_string args, const QXmlStreamAttributes*)
+{
+  wpt_tmp->latitude = args.toDouble();
+}
+
+void
+YahooFormat::wpt_lon(xg_string args, const QXmlStreamAttributes*)
+{
+  wpt_tmp->longitude = args.toDouble();
+}
+
+void
+YahooFormat::wpt_addr(xg_string args, const QXmlStreamAttributes*)
+{
+  if (!wpt_tmp->notes.isEmpty()) {
+    wpt_tmp->notes += as;
+  }
+  wpt_tmp->notes += args;
+}
diff --git a/deprecated/yahoo.h b/deprecated/yahoo.h
new file mode 100644 (file)
index 0000000..bc0e355
--- /dev/null
@@ -0,0 +1,100 @@
+/*
+    Read Yahoo Geocoded files.
+
+    Copyright (C) 2002-2020 Robert Lipe, gpsbabel.org
+
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+
+ */
+#ifndef YAHOO_H_INCLUDED_
+#define YAHOO_H_INCLUDED_
+
+#include <QList>                        // for QList
+#include <QString>                      // for QString
+#include <QVector>                      // for QVector
+#include <QXmlStreamAttributes>         // for QXmlStreamAttributes
+
+#include "defs.h"
+#include "format.h"                     // for Format
+#include "xmlgeneric.h"                 // for xg_tag_map_entry, cb_cdata, XgFunctor, cb_end, cb_start
+
+class YahooFormat : public Format
+{
+public:
+  QVector<arglist_t>* get_args() override
+  {
+    return &yahoo_args;
+  }
+
+  ff_type get_type() const override
+  {
+    return ff_type_file;
+  }
+
+  QVector<ff_cap> get_cap() const override
+  {
+    return {
+      ff_cap_read,  // waypoints
+      ff_cap_none,  // tracks
+      ff_cap_none   // routes
+    };
+  }
+
+  QString get_encode() const override
+  {
+    return CET_CHARSET_ASCII;
+  }
+
+  int get_fixed_encode() const override
+  {
+    return 0;
+  }
+
+  void rd_init(const QString&) override;
+  void read() override;
+  void rd_deinit() override;
+
+private:
+  Waypoint* wpt_tmp{};
+  char* as{};
+
+  QVector<arglist_t> yahoo_args = {
+    {
+      "addrsep", &as,
+      "String to separate concatenated address fields (default=\", \")",
+      ", ", ARGTYPE_STRING, ARG_NOMINMAX, nullptr
+    },
+  };
+
+  void wpt_s(const QString&, const QXmlStreamAttributes*);
+  void wpt_e(const QString&, const QXmlStreamAttributes*);
+  void wpt_lat(const QString&, const QXmlStreamAttributes*);
+  void wpt_lon(const QString&, const QXmlStreamAttributes*);
+  void wpt_addr(const QString&, const QXmlStreamAttributes*);
+
+  QList<xg_functor_map_entry<YahooFormat>> gl_map = {
+    {&YahooFormat::wpt_s, cb_start, "/ResultSet/Result"},
+    {&YahooFormat::wpt_lat, cb_cdata, "/ResultSet/Result/Latitude"},
+    {&YahooFormat::wpt_lon, cb_cdata, "/ResultSet/Result/Longitude"},
+    {&YahooFormat::wpt_addr, cb_cdata, "/ResultSet/Result/Address"},
+    {&YahooFormat::wpt_addr, cb_cdata, "/ResultSet/Result/City"},
+    {&YahooFormat::wpt_addr, cb_cdata, "/ResultSet/Result/State"},
+    {&YahooFormat::wpt_addr, cb_cdata, "/ResultSet/Result/Zip"},
+    {&YahooFormat::wpt_addr, cb_cdata, "/ResultSet/Result/Country"},
+    {&YahooFormat::wpt_e, cb_end, "/ResultSet/Result"}
+  };
+};
+
+#endif //  YAHOO_H_INCLUDED_
diff --git a/g7towin.cc b/g7towin.cc
deleted file mode 100644 (file)
index 108ebad..0000000
+++ /dev/null
@@ -1,591 +0,0 @@
-/*
-
-    Support for G7ToWin data files (.g7t),
-    Copyright (C) 2007 Olaf Klein, o.b.klein@gpsbabel.org
-
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with this program; if not, write to the Free Software
-    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
-*/
-
-/*
-    History:
-               04/07/2007: start programming
-               04/15/2007: added to gpsbabel
-*/
-
-#include "defs.h"
-#include "cet_util.h"
-#include "csv_util.h"
-#include "garmin_fs.h"
-#include "garmin_tables.h"
-#include "jeeps/gpsmath.h"
-#include "strptime.h"
-
-#include <cstdio>
-#include <cstdlib>
-#include <ctime>
-
-#if CSVFMTS_ENABLED
-
-#define MYNAME "g7towin"
-
-#define G7T_HEADER     "Version 2:G7T"
-
-static gbfile* fin;
-static grid_type grid;
-static int datum;
-static gpsdata_type mode;
-static double altf;
-static int gardown;
-static int event_ct;
-
-static
-QVector<arglist_t> g7towin_args = {
-};
-
-#define WAYPT__OFS     0x00000
-#define TRKPT__OFS     0x01000
-
-#define WPT_c0_OFS     0x0c000
-#define WPT_c1_OFS     0x0c100
-#define WPT_c2_OFS     0x0c200
-#define WPT_c3_OFS     0x0c300
-#define WPT_c4_OFS     0x0c400
-#define WPT_c5_OFS     0x0c500
-#define WPT_c6_OFS     0x0c600
-#define WPT_c7_OFS     0x0c700
-#define WPT_c8_OFS     0x0c800
-#define WPT_cA_OFS     0x0cA00
-#define WPT_cB_OFS     0x0cB00
-#define WPT_cC_OFS     0x0cC00
-#define WPT_cD_OFS     0x0cD00
-
-static void
-parse_line(char* buff, int index, const char* delimiter, Waypoint* wpt)
-{
-  char* cin;
-  garmin_fs_t* gmsd = garmin_fs_t::find(wpt);
-
-  while ((cin = csv_lineparse(buff, delimiter, "", index++))) {
-
-    buff = nullptr;
-    cin = lrtrim(cin);
-
-    if ((*cin == '\0') ||
-        (strcmp(cin, "INF") == 0) ||
-        (strcmp(cin, "1e25") == 0) ||
-        (strcmp(cin, "1.0e25") == 0)) {
-      continue;
-    }
-
-    switch (index) {
-
-      int categories;
-      struct tm tm;
-      char* cerr;
-
-    case TRKPT__OFS + 1:
-      cin += parse_coordinates(cin, datum, grid,
-                               &wpt->latitude, &wpt->longitude, MYNAME);
-      while (isspace(*cin)) {
-        cin++;
-      }
-
-      memset(&tm, 0, sizeof(tm));
-      cerr = strptime(cin, "%a %b %d %H:%M:%S %Y", &tm);
-      if (cerr == nullptr) {
-        fatal(MYNAME ": Unable to convert date (%s)!\n", cin);
-      }
-      wpt->SetCreationTime(mkgmtime(&tm));
-      break;
-
-    case WAYPT__OFS + 1:
-      wpt->description = (cin);
-      break;
-
-    case WAYPT__OFS + 2:
-      wpt->icon_descr = gt_find_desc_from_icon_number(
-                          atoi(cin), PCX);
-      break;
-
-    case WAYPT__OFS + 4:
-      if (strcmp(cin, "S+C") == 0) {
-        garmin_fs_t::set_display(gmsd, gt_display_mode_symbol_and_comment);
-      } else if (strcmp(cin, "S") == 0) {
-        garmin_fs_t::set_display(gmsd, gt_display_mode_symbol);
-      } else if (strcmp(cin, "S+N") == 0) {
-        garmin_fs_t::set_display(gmsd, gt_display_mode_symbol_and_name);
-      }
-      break;
-
-    case WPT_cA_OFS + 1:
-    case WPT_c1_OFS + 1:
-      wpt->shortname = cin;
-      break;
-
-    case WPT_cA_OFS + 4:
-    case WPT_c4_OFS + 2:
-      garmin_fs_t::set_city(gmsd, cin);
-      break;
-
-    case WPT_cA_OFS + 5:
-    case WPT_c4_OFS + 3:
-      garmin_fs_t::set_state(gmsd, cin);
-      break;
-
-    case WPT_cA_OFS + 6:
-    case WPT_c4_OFS + 4:
-      garmin_fs_t::set_cc(gmsd, cin);
-      break;
-
-    case WPT_cB_OFS + 1:
-    case WPT_c6_OFS + 2:
-      garmin_fs_t::set_facility(gmsd, cin);
-      break;
-
-    case WPT_cB_OFS + 2:
-    case WPT_c6_OFS + 3:
-      garmin_fs_t::set_addr(gmsd, cin);
-      break;
-
-    case WPT_cB_OFS + 3: /*cross road */
-    case WPT_c6_OFS + 4:
-      garmin_fs_t::set_cross_road(gmsd, cin);
-      break;
-
-    case TRKPT__OFS + 2: /* altitude */
-    case WPT_cC_OFS + 1:
-    case WPT_c5_OFS + 1:
-    case WPT_c8_OFS + 1:
-      wpt->altitude = altf * atof(cin);
-      break;
-
-    case TRKPT__OFS + 3: /* depth */
-    case WPT_cC_OFS + 2:
-    case WPT_c5_OFS + 2:
-    case WPT_c8_OFS + 2:
-      WAYPT_SET(wpt, depth, altf * atof(cin));
-      break;
-
-    case TRKPT__OFS + 10: /* temperature */
-      if (*cin == '|') {
-        cin++;  /* in track points */
-      }
-      if (strcmp(cin, "1e25") == 0) {
-        break;
-      }
-      if (strcmp(cin, "1.0e25") == 0) {
-        break;
-      }
-      [[fallthrough]];
-    case WPT_cD_OFS + 1:
-    case WPT_cB_OFS + 6:
-      WAYPT_SET(wpt, temperature, atof(cin));
-      break;
-
-    case WAYPT__OFS + 6: /* proximity */
-    case WPT_cD_OFS + 2:
-      WAYPT_SET(wpt, proximity, atof(cin));
-      break;
-
-    case WPT_cB_OFS + 5:
-    case WPT_cD_OFS + 3:
-      categories = atoi(cin);
-      if (categories != 0) {
-        garmin_fs_t::set_category(gmsd, atoi(cin));
-      }
-      break;
-
-#if 0
-
-      /* currently unused */
-
-    case TRKPT__OFS + 5: /* distance from previous point */
-    case TRKPT__OFS + 6: /* distance from segment start */
-    case TRKPT__OFS + 7: /* distance from start */
-    case TRKPT__OFS + 8: /* velocity from previous point */
-    case TRKPT__OFS + 9: /* time (in seconds) from previous point */
-      break;
-
-    case WAYPT__OFS + 3: /* ignore color */
-      break;
-
-    case WAYPT__OFS + 5: /* always '0' */
-      break;
-
-    case TRKPT__OFS + 4:
-      if (case_ignore_strcmp(cin, "FT") == 0) ;
-      else if (case_ignore_strcmp(cin, "M") == 0) ;
-      else if (case_ignore_strcmp(cin, "SM") == 0) ;
-      else if (case_ignore_strcmp(cin, "NM") == 0) ;
-      else if (case_ignore_strcmp(cin, "KM") == 0) ;
-      break;
-
-    case WPT_cB_OFS + 4: /* unknown (datatype) */
-      break;
-
-    case WPT_cC_OFS + 3: /* waypt_class (always FF) */
-      break;
-
-    case WPT_cC_OFS + 4: /* class & subclass */
-    case WPT_cC_OFS + 5:
-    case WPT_cC_OFS + 6:
-    case WPT_cC_OFS + 7:
-    case WPT_cC_OFS + 8:
-    case WPT_cC_OFS + 9:
-    case WPT_cC_OFS + 10:
-    case WPT_cC_OFS + 11:
-    case WPT_cC_OFS + 12:
-    case WPT_cC_OFS + 13:
-    case WPT_cC_OFS + 14:
-    case WPT_cC_OFS + 15:
-    case WPT_cC_OFS + 16:
-    case WPT_cC_OFS + 17:
-    case WPT_cC_OFS + 18:
-    case WPT_cC_OFS + 19:
-    case WPT_cC_OFS + 20:
-    case WPT_cC_OFS + 21:
-      break;
-
-    case WPT_cC_OFS + 22:
-      /* distance */
-      break;
-#endif
-    }
-  }
-}
-
-static Waypoint*
-parse_waypt(char* buff)
-{
-  char* cin;
-  struct tm tm;
-
-  auto* wpt = new Waypoint;
-  garmin_fs_t* gmsd = garmin_fs_alloc(-1);
-  wpt->fs.FsChainAdd(gmsd);
-
-  if (gardown) {
-    cin = buff + 6;
-  } else {
-    /* We've seen waypoints with length of 14 and 15 !!! */
-    cin = buff + 15;
-    while ((cin > buff) && (! isspace(*cin))) {
-      cin--;
-    }
-  }
-
-  while (isspace(*cin)) {
-    cin--;
-  }
-  if (cin >= buff) {
-    char*s = xstrndup(buff, cin - buff + 1);
-    wpt->shortname = s;
-    xfree(s);
-  }
-
-  if (gardown) {
-    buff += 6;
-  } else {
-    buff += 15;
-  }
-  while (isspace(*buff)) {
-    buff++;
-  }
-
-  buff += parse_coordinates(buff, datum, grid,
-                            &wpt->latitude, &wpt->longitude, MYNAME);
-  while (isspace(*buff)) {
-    buff++;
-  }
-
-  memset(&tm, 0, sizeof(tm));
-  char* cerr = strptime(buff, "%a %b %d %H:%M:%S %Y", &tm);
-  if (cerr == nullptr) {
-    fatal(MYNAME ": Unable to convert date (%s)!\n", buff);
-  }
-  wpt->SetCreationTime(mkgmtime(&tm));
-
-  /* go over time stamp */
-  int i = 5;
-  while (buff && i) {
-    i--;
-    buff = strchr(buff, ' ');
-    if (buff) {
-      buff++;
-    }
-  }
-  if (gardown && (buff == nullptr)) {
-    return wpt;
-  }
-  is_fatal((buff == nullptr), MYNAME ": Incomplete waypoint line!");
-
-  while (isspace(*buff)) {
-    buff++;
-  }
-
-  parse_line(buff, WAYPT__OFS, "^", wpt);
-
-  return wpt;
-}
-
-static Waypoint*
-parse_trkpt(char* buff)
-{
-  auto* wpt = new Waypoint;
-  garmin_fs_t* gmsd = garmin_fs_alloc(-1);
-  wpt->fs.FsChainAdd(gmsd);
-
-  parse_line(buff, TRKPT__OFS, ";", wpt);
-
-  return wpt;
-}
-
-/*
- * parse_categories is currently only a dummy procedure.
- * w'll need a central storage with binding to the module
- * which has established a list of category names.
- */
-
-static void
-parse_categories(char* buff)
-{
-  char* cin;
-  int cat = 0;
-
-  while ((cin = csv_lineparse(buff, ",", "", cat++))) {
-    uint16_t cx;
-
-    buff = nullptr;
-
-    cin = lrtrim(cin);
-    if (*cin == 0) {
-      continue;
-    }
-
-    garmin_fs_convert_category(cin, &cx);
-  }
-}
-
-
-/* main functions */
-
-static void
-rd_init(const QString& fname)
-{
-  fin = gbfopen(fname, "rb", MYNAME);
-
-  gardown = 1;
-  mode = wptdata;
-  grid = grid_lat_lon_dmm;
-  datum = DATUM_WGS84;
-  altf = 1;
-  event_ct = 0;
-}
-
-static void
-rd_deinit()
-{
-  gbfclose(fin);
-}
-
-static void
-data_read()
-{
-  char* buff;
-  int line = 0;
-  Waypoint* wpt = nullptr;
-  route_head* head = nullptr;
-
-  while ((buff = gbfgetstr(fin))) {
-    if ((line++ == 0) && fin->unicode) {
-      cet_convert_init(CET_CHARSET_UTF8, 1);
-    }
-
-    char* cin = lrtrim(buff);
-    if (!*cin) {
-      continue;
-    }
-
-    char* cdata = cin+1;
-    while (! isspace(*cdata)) {
-      cdata++;
-    }
-    while (isspace(*cdata)) {
-      cdata++;
-    }
-    if (! *cdata) {
-      continue;
-    }
-
-    switch (*cin) {
-
-    case '#': /* comment */
-      break;
-
-    case 'A':
-      if (case_ignore_strncmp(cdata, "Meter", 5) == 0) {
-        altf = 1.0;
-      } else if (case_ignore_strncmp(cdata, "Feet", 4) == 0) {
-        altf = FEET_TO_METERS(1.0);
-      }
-      break;
-
-    case 'C': /* categories */
-      parse_categories(cdata);
-      break;
-
-    case 'D':
-      datum = gt_lookup_datum_index(cdata, MYNAME);
-      break;
-
-    case 'I': /* event point */
-      wpt = new Waypoint;
-      cdata += parse_coordinates(cdata, datum, grid,
-                                 &wpt->latitude, &wpt->longitude, MYNAME);
-      wpt->shortname = QString("Event%1").arg(++event_ct);
-      while (isspace(*cdata)) {
-        cdata++;
-      }
-      if (*cdata == ';') {
-        cdata++;
-        wpt->icon_descr = gt_find_desc_from_icon_number(
-                            atoi(cdata), PCX);
-      }
-      waypt_add(wpt);
-      break;
-
-    case 'M':
-      grid = gt_lookup_grid_type(cdata, MYNAME);
-      break;
-
-    case 'P': /* proximity waypoint */
-    case 'W': /* normal waypoint */
-      wpt = parse_waypt(cin + 3);
-      if (wpt) {
-        if (mode == rtedata) {
-          route_add_wpt(head, wpt);
-        } else {
-          waypt_add(wpt);
-        }
-      }
-      break;
-
-    case 'c': /* additional lines */
-      switch (*(cin+1)) {
-        int index;
-
-      case 'A':
-      case 'B':
-      case 'C':
-      case 'D':
-
-        index = WPT_cA_OFS + ((*(cin+1) - 'A') * 256);
-        parse_line(cdata, index, "|", wpt);
-        break;
-
-      case '1':
-      case '2':
-      case '3':
-      case '4':
-      case '5':
-      case '6':
-      case '7':
-      case '8':
-
-        index = WPT_c0_OFS + ((*(cin+1) - '0') * 256);
-        parse_line(cdata, index, ";", wpt);
-        break;
-
-      case 'L':
-        waypt_add_url(wpt, cdata, nullptr);
-        break;
-
-      default:
-        break;
-      }
-      break;
-
-    case 'N':  /* track log header */
-      mode = trkdata;
-      head = new route_head;
-      cdata = strchr(cdata, '-');
-      if (cdata) {
-        while (isspace(*cdata)) {
-          cdata++;
-        }
-        if (*cdata) {
-          char* s = strrchr(cdata, ',');
-          if (s) {
-            *s = '\0';
-            s = strrchr(cdata, ',');
-            if (s) {
-              *s = '\0';
-              head->rte_name = cdata;
-            }
-          }
-        }
-      }
-      track_add_head(head);
-      break;
-
-    case 'R':  /* route header */
-      mode = rtedata;
-      head = new route_head;
-      cdata += 3; /*skip route number */
-      if (*cdata) {
-        head->rte_name = cdata;
-      }
-      route_add_head(head);
-      break;
-
-    case 'T':
-      wpt = parse_trkpt(cdata);
-      if (wpt) {
-        track_add_wpt(head, wpt);
-      }
-      break;
-
-    case 'V':
-      if (strcmp(cin, G7T_HEADER) != 0) {
-        fatal(MYNAME ": Invalid version or invalid file!\n");
-      }
-      gardown = 0;
-      break;
-
-    default:
-      break;
-    }
-  }
-}
-
-/* --------------------------------------------------------------------------- */
-
-ff_vecs_t g7towin_vecs = {
-  ff_type_file,
-  { ff_cap_read, ff_cap_read, ff_cap_read },
-  rd_init,
-  nullptr,
-  rd_deinit,
-  nullptr,
-  data_read,
-  nullptr,
-  nullptr,
-  &g7towin_args,
-  CET_CHARSET_MS_ANSI, 0
-  , NULL_POS_OPS,
-  nullptr
-};
-
-#endif /* CSVFMTS_ENABLED */
diff --git a/gopal.cc b/gopal.cc
deleted file mode 100644 (file)
index d80e775..0000000
--- a/gopal.cc
+++ /dev/null
@@ -1,403 +0,0 @@
-/*
-
-
-       Copyright (C) 2008  Dr. J�rgen Neumann, Juergen.Neumann@online.de
-       Copyright (C) 2005  Robert Lipe, robertlipe+source@gpsbabel.org (based on nmea.c)
-       Copyright (C) 20XX  probably many others from the gpsbabel development team ;-)
-
-       This program is free software; you can redistribute it and/or modify
-       it under the terms of the GNU General Public License as published by
-       the Free Software Foundation; either version 2 of the License, or
-       (at your option) any later version.
-
-       This program is distributed in the hope that it will be useful,
-       but WITHOUT ANY WARRANTY; without even the implied warranty of
-       MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-       GNU General Public License for more details.
-
-       You should have received a copy of the GNU General Public License
-       along with this program; if not, write to the Free Software
-       Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
-
-       =====================================================================================
-
-       This file allows gpsbabel to read and write the internal track log format used by
-       GoPal navigation systems. They produce a simple line-oriented format with one point per
-       second. Unfortunately the the data does not contain a valid date, only some kind of timetick,
-       together with each point (perhaps by mistake ??). So we have to parse the filename for a valid starting
-       date and add the timeoffset. Second problem (at least to me) was that irregularly stupid errors were
-       in the data, i.e. only one data point shows a totally wrong longitude or latitude. Everything else in
-       the dataset seems ok, so I needed a way to sort out these errors. My solution is to calculate the speed
-       between successive points and drop points not between minspeed and maxspeed. This way I can sort out most
-       of this annoying bugs, a side effect is that if a minimum speed > 0 is set points with the same coordinates are also
-       dropped.
-
-       Fileformat GoPal
-       TICK;   TIME UTC; LONG;    LAT;       HEIGHT; SPEED km/h;  FIX; HDOP;     SAT
-       3801444, 080558, 2.944362, 43.262117, 295.28, 0.12964, 2, 2.900000, 3
-       Filenames:
-               trackYYYYMMDD_HHMMSS.trk
-               A_YYYYMMDD_HHMMSS.trk
-       with HHMMSS local time (not UTC)
-
-       History
-       2008-07-18 initial release of Version 0.1
-       2008-07-26 bugfix: filenamehandling linux, format specification in write statement
-
-       ToDo:
-       - check for midnight & adjust
-*/
-
-#include "defs.h"
-#include "cet_util.h"
-#include "csv_util.h"
-#include "grtcirc.h"
-#include "jeeps/gpsmath.h"
-#include "strptime.h"
-#include <cmath>
-#include <cstdio>
-#include <cstdlib>
-#include <QDateTime>
-#include <QString>
-
-#define MYNAME "gopal"
-
-static gbfile* fin, *fout;
-
-static struct tm tm,filenamedate, trackdate;
-static time_t          tx;
-static char* optdate=nullptr;
-static char* optmaxspeed=nullptr;
-static char* optminspeed=nullptr;
-static char* optclean= nullptr;
-static double minspeed,maxspeed;
-static struct tm opt_tm;       /* converted "date" parameter */
-static
-QVector<arglist_t> gopal_args = {
-  {"date", &optdate, "Complete date-free tracks with given date (YYYYMMDD).", nullptr, ARGTYPE_INT, ARG_NOMINMAX, nullptr },
-  {"maxspeed", &optmaxspeed, "The maximum speed (km/h) traveling from waypoint to waypoint.", "200", ARGTYPE_INT, "1", "1000", nullptr },
-  {"minspeed", &optminspeed, "The minimum speed (km/h) traveling from waypoint to waypoint. Set >0 to remove duplicate waypoints", "0", ARGTYPE_INT, "0", "999", nullptr },
-  {"clean", &optclean, "Cleanup common errors in trackdata", "1", ARGTYPE_BOOL, ARG_NOMINMAX, nullptr },
-};
-
-#define CHECK_BOOL(a) if (a && (*a == '0')) a = NULL
-
-static int gopal_check_line(char* line)
-{
-  char* c = line;
-  int i = 0;
-  while ((c = strchr(c, ','))) {
-    c++;
-    i++;
-  }
-  return i;
-}
-
-
-
-/*******************************************************************************
-* %%%        global callbacks called by gpsbabel main process              %%% *
-*******************************************************************************/
-
-static void
-gopal_rd_init(const QString& fname)
-{
-  CHECK_BOOL(optclean);
-  if (optminspeed) {
-    minspeed=atof(optminspeed);
-    if (global_opts.debug_level > 1) {
-      fprintf(stderr,"options from command line : gopal minspeed = %s\n",optminspeed);
-    }
-  } else {
-    minspeed=0;
-  }
-  if (optmaxspeed) {
-    maxspeed=atof(optmaxspeed);
-    if (global_opts.debug_level > 1) {
-      fprintf(stderr,"options from command line : gopal maxspeed = %s\n",optmaxspeed);
-    }
-  } else {
-    maxspeed=200;
-  }
-  if (global_opts.debug_level > 1) {
-    fprintf(stderr,"setting minspeed to %5.1lf km/h and maxspeed to %5.1lf km/h\n",minspeed,maxspeed);
-  }
-
-  fin = gbfopen(fname, "r", MYNAME);
-
-  if (optdate) {
-    memset(&opt_tm, 0, sizeof(opt_tm));
-
-    char* ck = strptime(optdate, "%Y%m%d", &opt_tm);
-    if ((ck == nullptr) || (*ck != '\0') || (strlen(optdate) != 8)) {
-      fatal(MYNAME ": Invalid date \"%s\"!\n", optdate);
-    } else if (opt_tm.tm_year < 70) {
-      fatal(MYNAME ": Date \"%s\" is out of range (have to be 19700101 or later)!\n", optdate);
-    }
-    tx = mkgmtime(&opt_tm);
-
-  } else {
-    /* remove path */
-    QString filename = get_filename(fname);
-       QString datestr;
-
-    if (filename.startsWith("track")&&(filename.length()>13)) { // we need at least 13 letters: trackYYYYMMDD...
-      datestr = filename.mid(5,8);
-    } else if (filename.startsWith("A_")&&(filename.length()>10)) { // here we expect at least 10 letters: A_YYYYMMDD...
-      datestr = filename.mid(2,8);
-    }
-    // in buff we should now have something which looks like a valid date starting with YYYYMMDD
-    /*ck = (char*)*/strptime(qPrintable(datestr), "%Y%m%d", &filenamedate);
-    // if (((ck == NULL) || (*ck != '\0') )&&!(optdate))
-    // fatal(MYNAME ": Invalid date in filename \"%s\", try to set manually using \"date\" switch!\n", buff);
-    // /* else */ if (filenamedate.tm_year < 70)
-    // fatal(MYNAME ": Date \"%s\" is out of range (have to be 19700101 or later)!\n", buff);
-    // tx= mkgmtime(&filenamedate);
-  }
-}
-
-static void
-gopal_rd_deinit()
-{
-  gbfclose(fin);
-}
-
-static void
-gopal_read()
-{
-
-  char* buff;
-  double hmsd;
-  int fix;
-  int hms;
-  Waypoint* lastwpt=nullptr;
-  char tbuffer[64];
-  struct tm tm2;
-  double lat_old = 0;
-
-
-  auto* route = new route_head;
-  QDateTime qtx = QDateTime::fromSecsSinceEpoch(tx, Qt::UTC);
-  route->rte_name = "Tracklog ";
-  route->rte_name += qtx.toString(Qt::ISODate);
-  route_add_head(route);
-
-  long line = 0;
-  while ((buff = gbfgetstr(fin))) {
-    if ((line == 0) && fin->unicode) {
-      cet_convert_init(CET_CHARSET_UTF8, 1);
-    }
-
-    char* str = buff = lrtrim(buff);
-    if (*buff == '\0') {
-      continue;
-    }
-    int nfields = gopal_check_line(buff);
-    if ((nfields != 8) && (nfields != 11)) {
-      continue;
-    }
-    // Old format.  Hassle for date.
-    if ((nfields == 8) && (tx == 0)) {
-      // fatal(MYNAME ": Invalid date in filename \"%s\", try to set manually using \"date\" switch!\n", buff);
-    }
-    auto* wpt = new Waypoint;
-
-    int column = -1;
-    // the format of gopal is quite simple. Unfortunately the developers forgot the date as the first element...
-    //TICK;    TIME;   LONG;     LAT;       HEIGHT; SPEED;  Fix; HDOP;    SAT
-    //3801444, 080558, 2.944362, 43.262117, 295.28, 0.12964, 2, 2.900000, 3
-    char* c = csv_lineparse(str, ",", "", column++);
-    int millisecs = 0;
-    while (c != nullptr) {
-      switch (column) {
-      case  0: /* "-" */       /* unknown fields for the moment */
-        unsigned long microsecs;
-        sscanf(c, "%lu", &microsecs);
-        // Just save this; we'll use it on the next field.
-        millisecs = lround((microsecs % 1000000) / 1000.0);
-        break;
-      case  1:                         /* Time UTC */
-        sscanf(c,"%lf",&hmsd);
-        hms = (int) hmsd;
-        tm.tm_sec = hms % 100;
-        hms = hms / 100;
-        tm.tm_min = hms % 100;
-        hms = hms / 100;
-        tm.tm_hour = hms % 100;
-        tm.tm_year=trackdate.tm_year;
-        tm.tm_mon=trackdate.tm_mon;
-        tm.tm_mday=trackdate.tm_mday;
-        // This will probably be overwritten by field 9...if we have 9 fields.
-        wpt->SetCreationTime(tx+((((time_t)tm.tm_hour * 60) + tm.tm_min) * 60) + tm.tm_sec);
-        wpt->creation_time = wpt->creation_time.addMSecs(millisecs);
-        if (global_opts.debug_level > 1) {
-          time_t t = wpt->GetCreationTime().toTime_t();
-          strftime(tbuffer, sizeof(tbuffer), "%c", gmtime(&t));
-          printf("parsed timestamp: %s\n",tbuffer);
-        }
-        break;
-
-      case  2:                                 /* longitude */
-        sscanf(c, "%lf", &wpt->longitude);
-        break;
-
-      case  3:                                 /* latitude */
-        sscanf(c, "%lf", &wpt->latitude);
-        break;
-      case  4:                                 /* altitude */
-        sscanf(c, "%lf", &wpt->altitude);
-        break;
-      case  5:                                 /* speed */
-        //sscanf(c, "%lf", &wpt->speed);
-        wpt->speed=atof(c);
-        if (global_opts.debug_level > 1) {
-          printf("parsed speed: %8.5f\n",wpt->speed);
-        }
-        break;
-      case  6:                                 /* type of fix */
-        sscanf(c, "%d", &fix);
-        //my device shows only 0 or 2
-        //should i guess from no of sats if 2d or 3d?
-        switch (fix) {
-        case 0:
-          wpt->fix = fix_none;
-          break;
-        case 2:
-          wpt->fix = fix_2d;
-          break;
-          //case 3: wpt->fix = fix_3d;break;
-          //case 4: wpt->fix = fix_dgps;break; /* 2D_diff */
-          //case 5: wpt->fix = fix_dgps;break; /* 3D_diff */
-        default:
-          wpt->fix = fix_unknown;
-          break;
-        }
-        break;
-      case  7:                                 /* hdop */
-        wpt->hdop = atof(c);
-        //sscanf(c, "%lf", &wpt->hdop); does not work ???
-        //wpt->vdop=0;wpt->hdop=0;
-        break;
-      case  8:                                 /* number of sats */
-        sscanf(c, "%d", &wpt->sat);
-        break;
-        // Somewhere around mid/late 2009, these files started
-        // seeing 11 fields.
-      case  9:
-        memset(&tm2, 0, sizeof(tm2));
-        if (!strptime(c, "%Y%m%d", &tm2)) {
-          fatal("Bad date '%s'.\n", c);
-        }
-        wpt->creation_time = wpt->creation_time.addSecs(mkgmtime(&tm2));
-        break;
-      case 10:  // Unknown.  Ignored.
-      case 11:  // Bearing.  Ignored.
-        break;
-      }
-      c = csv_lineparse(nullptr, ",", "", column++);
-    }
-    line++;
-
-    if ((wpt->fix != fix_none)&&(lat_old==0)) { //first-time init
-      lat_old=wpt->latitude;
-      //route_add_wpt(route, wpt);
-      lastwpt=wpt;
-    }
-    //calculate the speed to reach this waypoint from the last. This way I try to sort out invalid waypoints
-    double speed = 0;
-    if (lastwpt !=nullptr) {
-      speed=3.6*radtometers(gcdist(RAD(lastwpt->latitude), RAD(lastwpt->longitude), RAD(wpt->latitude), RAD(wpt->longitude))) /
-            abs((int)(wpt->creation_time.toTime_t() - lastwpt->GetCreationTime().toTime_t()));
-      //printf("speed line %d %lf \n",line,speed);
-    }
-    /* Error handling: in the tracklog of my device sometimes "jump" waypoints ;-) */
-    if ((optclean) &&
-         (((wpt->longitude==0.0)|| (wpt->latitude==0.0)||(std::abs(wpt->latitude)>90)||(std::abs(wpt->longitude)>180))||
-          ((speed>maxspeed)||(speed<minspeed)))
-       ) {
-      if (global_opts.debug_level > 1) {
-        fprintf(stderr,"Problem in or around line %5ld: \"%s\" %lf km/h\n",line,buff,speed);
-      }
-    } else {
-      if (global_opts.debug_level > 1) {
-        fprintf(stderr,"valid                line %5ld: \"%s\" %lf km/h\n",line,buff,speed);
-      }
-      lastwpt=wpt;
-      lat_old=wpt->latitude;
-      route_add_wpt(route,wpt);
-      waypt_add(new Waypoint(*wpt));
-    }
-  }
-}
-
-static void
-gopal_write_waypt(const Waypoint* wpt)
-{
-  int fix=fix_unknown;
-  //TICK;    TIME;   LONG;     LAT;       HEIGHT; SPEED;  UN; HDOP;     SAT
-  //3801444, 080558, 2.944362, 43.262117, 295.28, 0.12964, 2, 2.900000, 3
-  QString tbuffer = wpt->creation_time.toString("HHmmss");
-  if (wpt->fix!=fix_unknown) {
-    switch (wpt->fix) {
-    case fix_none:
-      fix = 0;
-      break;
-    case fix_2d:
-      fix = 2;
-      break;
-    default:
-      fix = 0;
-      break;
-    }
-  }
-  //MSVC handles time_t as int64, gcc and mac only int32, so convert it:
-  unsigned long timestamp = (unsigned long)wpt->GetCreationTime().toTime_t();
-  gbfprintf(fout, "%lu, %s, %lf, %lf, %5.1lf, %8.5lf, %d, %lf, %d\n",timestamp, CSTR(tbuffer),  wpt->longitude, wpt->latitude,wpt->altitude,
-            wpt->speed,fix,wpt->hdop,wpt->sat);
-}
-
-
-static void
-gopal_wr_init(const QString& fname)
-{
-  fout = gbfopen(fname, "w", MYNAME);
-}
-
-static void
-gopal_wr_deinit()
-{
-  gbfclose(fout);
-}
-
-static void
-gopal_write()
-{
-  route_disp_all(nullptr, nullptr, gopal_write_waypt);
-}
-
-/**************************************************************************/
-
-// capabilities below means: we can only read and write waypoints
-//
-
-ff_vecs_t gopal_vecs = {
-  ff_type_file,
-  {
-    ff_cap_none                /* waypoints */,
-    (ff_cap)(ff_cap_read | ff_cap_write)       /* tracks */,
-    ff_cap_none        /* routes */
-  },
-  gopal_rd_init,
-  gopal_wr_init,
-  gopal_rd_deinit,
-  gopal_wr_deinit,
-  gopal_read,
-  gopal_write,
-  nullptr,
-  &gopal_args,
-  CET_CHARSET_ASCII, 0 /* ascii is the expected character set */
-  /* not fixed, can be changed through command line parameter */
-  , NULL_POS_OPS,
-  nullptr
-};
-/**************************************************************************/
diff --git a/gpsman b/gpsman
deleted file mode 100644 (file)
index 771a261..0000000
--- a/gpsman
+++ /dev/null
@@ -1,53 +0,0 @@
-% Written by GPSManager 05-Apr-2002 21:52:36 (EST)
-% Edit at your own risk!
-
-!Format: DMS 1 WGS 84
-!Creation: no
-
-!W:
-GC894          N41 20 07.9     W85 24 31.9     alt=-0.114379882812     GD108:class=|c! GD108:colour=~|Z        GD108:attrs=`   GD108:depth=QY|c%|_i    GD108:state=|cAA        GD108:country=|cAA
-GC1F78         N40 43 04.1     W85 06 25.1     alt=-0.114379882812     GD108:class=|c! GD108:colour=~|Z        GD108:attrs=`   GD108:depth=QY|c%|_i    GD108:state=|cAA        GD108:country=|cAA
-003            N41 07 21.3     W85 09 23.5     symbol=boat_ramp        alt=220.506469727       GD108:class=|c! GD108:colour=~|Z        GD108:attrs=`   GD108:depth=QY|c%|_i    GD108:state=|cAA        GD108:country=|cAA
-GC93           N41 43 09.4     W85 58 59.9     alt=-0.114379882812     GD108:class=|c! GD108:colour=~|Z        GD108:attrs=`   GD108:depth=QY|c%|_i    GD108:state=|cAA        GD108:country=|cAA
-GC2193         N40 25 29.0     W86 54 52.0     alt=-0.114379882812     GD108:class=|c! GD108:colour=~|Z        GD108:attrs=`   GD108:depth=QY|c%|_i    GD108:state=|cAA        GD108:country=|cAA
-004            N41 07 22.6     W85 09 24.3     symbol=flag     alt=250.787719727       GD108:class=|c! GD108:colour=~|Z        GD108:attrs=`   GD108:depth=QY|c%|_i    GD108:state=|cAA        GD108:country=|cAA
-GCA80          N40 29 14.3     W86 51 50.5     alt=-0.114379882812     GD108:class=|c! GD108:colour=~|Z        GD108:attrs=`   GD108:depth=QY|c%|_i    GD108:state=|cAA        GD108:country=|cAA
-GC28CB         N40 50 32.8     W85 25 20.8     alt=-0.114379882812     GD108:class=|c! GD108:colour=~|Z        GD108:attrs=`   GD108:depth=QY|c%|_i    GD108:state=|cAA        GD108:country=|cAA
-GC2665         N40 45 56.4     W85 35 58.3     alt=-0.114379882812     GD108:class=|c! GD108:colour=~|Z        GD108:attrs=`   GD108:depth=QY|c%|_i    GD108:state=|cAA        GD108:country=|cAA
-005            N41 02 51.4     W85 16 41.6     symbol=flag     alt=263.044433594       GD108:class=|c! GD108:colour=~|Z        GD108:attrs=`   GD108:depth=QY|c%|_i    GD108:state=|cAA        GD108:country=|cAA
-GCB78          N40 26 17.9     W86 54 02.2     alt=-0.114379882812     GD108:class=|c! GD108:colour=~|Z        GD108:attrs=`   GD108:depth=QY|c%|_i    GD108:state=|cAA        GD108:country=|cAA
-GC2ADC         N40 26 16.4     W86 48 21.6     alt=-0.114379882812     GD108:class=|c! GD108:colour=~|Z        GD108:attrs=`   GD108:depth=QY|c%|_i    GD108:state=|cAA        GD108:country=|cAA
-ABACUS         N41 04 20.6     W85 13 50.8     symbol=building alt=243.577880859       GD108:class=|c! GD108:colour=~|Z        GD108:attrs=`   GD108:depth=QY|c%|_i    GD108:state=|cAA        GD108:country=|cAA
-GCD85          N41 05 03.3     W85 08 11.1     alt=-0.114379882812     GD108:class=|c! GD108:colour=~|Z        GD108:attrs=`   GD108:depth=QY|c%|_i    GD108:state=|cAA        GD108:country=|cAA
-GCB8           N40 26 09.5     W87 09 49.1     alt=-0.114379882812     GD108:class=|c! GD108:colour=~|Z        GD108:attrs=`   GD108:depth=QY|c%|_i    GD108:state=|cAA        GD108:country=|cAA
-GC2BE8         N40 52 45.9     W85 32 26.1     alt=-0.114379882812     GD108:class=|c! GD108:colour=~|Z        GD108:attrs=`   GD108:depth=QY|c%|_i    GD108:state=|cAA        GD108:country=|cAA
-CASH1          N41 04 41.8     W85 08 19.3     symbol=flag     alt=245.740844727       GD108:class=|c! GD108:colour=~|Z        GD108:attrs=`   GD108:depth=QY|c%|_i    GD108:state=|cAA        GD108:country=|cAA
-H0ME           N41 02 51.7     W85 16 42.1     symbol=house    alt=272.176879883       GD108:class=|c! GD108:colour=~|Z        GD108:attrs=`   GD108:depth=QY|c%|_i    GD108:state=|cAA        GD108:country=|cAA
-GC2C81         N41 12 24.2     W85 02 23.5     alt=-0.114379882812     GD108:class=|c! GD108:colour=~|Z        GD108:attrs=`   GD108:depth=QY|c%|_i    GD108:state=|cAA        GD108:country=|cAA
-CENCEN         N41 41 39.0     W86 14 53.3     alt=-0.114379882812     GD108:class=|c! GD108:colour=~|Z        GD108:attrs=`   GD108:depth=QY|c%|_i    GD108:state=|cAA        GD108:country=|cAA
-TOSB2          N41 44 00.4     W84 59 46.4     alt=-0.114379882812     GD108:class=|c! GD108:colour=~|Z        GD108:attrs=`   GD108:depth=QY|c%|_i    GD108:state=|cAA        GD108:country=|cAA
-GC2C90         N40 50 08.2     W85 27 14.9     alt=-0.114379882812     GD108:class=|c! GD108:colour=~|Z        GD108:attrs=`   GD108:depth=QY|c%|_i    GD108:state=|cAA        GD108:country=|cAA
-CWORK          N41 07 23.0     W85 09 24.7     symbol=flag     alt=254.633056641       GD108:class=|c! GD108:colour=~|Z        GD108:attrs=`   GD108:depth=QY|c%|_i    GD108:state=|cAA        GD108:country=|cAA
-TOSB3          N41 43 21.9     W86 15 20.3     alt=-0.114379882812     GD108:class=|c! GD108:colour=~|Z        GD108:attrs=`   GD108:depth=QY|c%|_i    GD108:state=|cAA        GD108:country=|cAA
-GC2C91         N41 05 01.4     W85 08 18.7     alt=-0.114379882812     GD108:class=|c! GD108:colour=~|Z        GD108:attrs=`   GD108:depth=QY|c%|_i    GD108:state=|cAA        GD108:country=|cAA
-FRSB1          N41 40 34.1     W86 15 01.1     alt=-0.114379882812     GD108:class=|c! GD108:colour=~|Z        GD108:attrs=`   GD108:depth=QY|c%|_i    GD108:state=|cAA        GD108:country=|cAA
-UNITA          N41 02 52.2     W85 16 41.6     symbol=flag     alt=256.795898438       GD108:class=|c! GD108:colour=~|Z        GD108:attrs=`   GD108:depth=QY|c%|_i    GD108:state=|cAA        GD108:country=|cAA
-GC2F53         N41 43 57.0     W86 04 48.3     alt=-0.114379882812     GD108:class=|c! GD108:colour=~|Z        GD108:attrs=`   GD108:depth=QY|c%|_i    GD108:state=|cAA        GD108:country=|cAA
-FRSB2          N41 38 10.3     W86 15 04.4     alt=-0.114379882812     GD108:class=|c! GD108:colour=~|Z        GD108:attrs=`   GD108:depth=QY|c%|_i    GD108:state=|cAA        GD108:country=|cAA
-GC333A         N41 01 42.7     W85 11 49.3     alt=-0.114379882812     GD108:class=|c! GD108:colour=~|Z        GD108:attrs=`   GD108:depth=QY|c%|_i    GD108:state=|cAA        GD108:country=|cAA
-FRSB4          N41 37 27.7     W86 15 08.7     alt=-0.114379882812     GD108:class=|c! GD108:colour=~|Z        GD108:attrs=`   GD108:depth=QY|c%|_i    GD108:state=|cAA        GD108:country=|cAA
-FRSB5          N41 38 53.4     W85 56 55.0     alt=-0.114379882812     GD108:class=|c! GD108:colour=~|Z        GD108:attrs=`   GD108:depth=QY|c%|_i    GD108:state=|cAA        GD108:country=|cAA
-GC34D4         N41 58 16.8     W86 11 05.3     alt=-0.114379882812     GD108:class=|c! GD108:colour=~|Z        GD108:attrs=`   GD108:depth=QY|c%|_i    GD108:state=|cAA        GD108:country=|cAA
-FRSB6          N41 34 46.3     W85 50 01.8     alt=-0.114379882812     GD108:class=|c! GD108:colour=~|Z        GD108:attrs=`   GD108:depth=QY|c%|_i    GD108:state=|cAA        GD108:country=|cAA
-GC42A1         N41 05 02.1     W85 03 14.2     alt=-0.114379882812     GD108:class=|c! GD108:colour=~|Z        GD108:attrs=`   GD108:depth=QY|c%|_i    GD108:state=|cAA        GD108:country=|cAA
-GC37C4         N41 38 15.5     W85 54 19.6     alt=-0.114379882812     GD108:class=|c! GD108:colour=~|Z        GD108:attrs=`   GD108:depth=QY|c%|_i    GD108:state=|cAA        GD108:country=|cAA
-FRSB7          N41 07 42.2     W85 11 47.8     alt=-0.114379882812     GD108:class=|c! GD108:colour=~|Z        GD108:attrs=`   GD108:depth=QY|c%|_i    GD108:state=|cAA        GD108:country=|cAA
-GC4378         N40 53 27.2     W85 28 13.4     alt=-0.114379882812     GD108:class=|c! GD108:colour=~|Z        GD108:attrs=`   GD108:depth=QY|c%|_i    GD108:state=|cAA        GD108:country=|cAA
-GC11EF         N40 01 45.3     W86 53 17.4     alt=-0.114379882812     GD108:class=|c! GD108:colour=~|Z        GD108:attrs=`   GD108:depth=QY|c%|_i    GD108:state=|cAA        GD108:country=|cAA
-GC44E5         N41 01 03.7     W85 15 07.0     alt=-0.114379882812     GD108:class=|c! GD108:colour=~|Z        GD108:attrs=`   GD108:depth=QY|c%|_i    GD108:state=|cAA        GD108:country=|cAA
-GC12FF         N41 33 23.9     W86 21 26.9     alt=-0.114379882812     GD108:class=|c! GD108:colour=~|Z        GD108:attrs=`   GD108:depth=QY|c%|_i    GD108:state=|cAA        GD108:country=|cAA
-GC47A5         N40 25 15.3     W86 54 17.6     alt=-0.114379882812     GD108:class=|c! GD108:colour=~|Z        GD108:attrs=`   GD108:depth=QY|c%|_i    GD108:state=|cAA        GD108:country=|cAA
-GC17E0         N41 52 01.5     W86 36 12.5     alt=-0.114379882812     GD108:class=|c! GD108:colour=~|Z        GD108:attrs=`   GD108:depth=QY|c%|_i    GD108:state=|cAA        GD108:country=|cAA
-GC488D         N41 33 43.7     W85 50 18.3     alt=-0.114379882812     GD108:class=|c! GD108:colour=~|Z        GD108:attrs=`   GD108:depth=QY|c%|_i    GD108:state=|cAA        GD108:country=|cAA
-GC1A9C         N41 06 36.2     W85 09 20.8     alt=-0.114379882812     GD108:class=|c! GD108:colour=~|Z        GD108:attrs=`   GD108:depth=QY|c%|_i    GD108:state=|cAA        GD108:country=|cAA
-
diff --git a/gpsman2 b/gpsman2
deleted file mode 100644 (file)
index 4cf6db8..0000000
--- a/gpsman2
+++ /dev/null
@@ -1,75 +0,0 @@
-% Written by GPSManager 24-May-2002 13:51:04 (CST)
-% Edit at your own risk!
-
-!Format: DMM 1 WGS 84
-!Creation: no
-
-!W:
-!Position: DMS
-GC37C4         N41 38 15.5     W85 54 19.6     alt=-0.114379882812     GD108:class=|c! GD108:colour=~|Z        GD108:attrs=`   GD108:depth=QY|c%|_i    GD108:state=|cAA        GD108:country=|cAA
-H0ME           N41 02 51.7     W85 16 42.1     symbol=house    alt=272.176879883       GD108:class=|c! GD108:colour=~|Z        GD108:attrs=`   GD108:depth=QY|c%|_i    GD108:state=|cAA        GD108:country=|cAA
-GC894          N41 20 07.9     W85 24 31.9     alt=-0.114379882812     GD108:class=|c! GD108:colour=~|Z        GD108:attrs=`   GD108:depth=QY|c%|_i    GD108:state=|cAA        GD108:country=|cAA
-FRSB7          N41 07 42.2     W85 11 47.8     alt=-0.114379882812     GD108:class=|c! GD108:colour=~|Z        GD108:attrs=`   GD108:depth=QY|c%|_i    GD108:state=|cAA        GD108:country=|cAA
-GC2C81         N41 12 24.2     W85 02 23.5     alt=-0.114379882812     GD108:class=|c! GD108:colour=~|Z        GD108:attrs=`   GD108:depth=QY|c%|_i    GD108:state=|cAA        GD108:country=|cAA
-GC1F78         N40 43 04.1     W85 06 25.1     alt=-0.114379882812     GD108:class=|c! GD108:colour=~|Z        GD108:attrs=`   GD108:depth=QY|c%|_i    GD108:state=|cAA        GD108:country=|cAA
-GC4378         N40 53 27.2     W85 28 13.4     alt=-0.114379882812     GD108:class=|c! GD108:colour=~|Z        GD108:attrs=`   GD108:depth=QY|c%|_i    GD108:state=|cAA        GD108:country=|cAA
-TOSB2          N41 44 00.4     W84 59 46.4     alt=-0.114379882812     GD108:class=|c! GD108:colour=~|Z        GD108:attrs=`   GD108:depth=QY|c%|_i    GD108:state=|cAA        GD108:country=|cAA
-CENCEN         N41 41 39.0     W86 14 53.3     alt=-0.114379882812     GD108:class=|c! GD108:colour=~|Z        GD108:attrs=`   GD108:depth=QY|c%|_i    GD108:state=|cAA        GD108:country=|cAA
-003            N41 07 21.3     W85 09 23.5     symbol=boat_ramp        alt=220.506469727       GD108:class=|c! GD108:colour=~|Z        GD108:attrs=`   GD108:depth=QY|c%|_i    GD108:state=|cAA        GD108:country=|cAA
-GC11EF         N40 01 45.3     W86 53 17.4     alt=-0.114379882812     GD108:class=|c! GD108:colour=~|Z        GD108:attrs=`   GD108:depth=QY|c%|_i    GD108:state=|cAA        GD108:country=|cAA
-GC2C90         N40 50 08.2     W85 27 14.9     alt=-0.114379882812     GD108:class=|c! GD108:colour=~|Z        GD108:attrs=`   GD108:depth=QY|c%|_i    GD108:state=|cAA        GD108:country=|cAA
-GC93           N41 43 09.4     W85 58 59.9     alt=-0.114379882812     GD108:class=|c! GD108:colour=~|Z        GD108:attrs=`   GD108:depth=QY|c%|_i    GD108:state=|cAA        GD108:country=|cAA
-GC12FF         N41 33 23.9     W86 21 26.9     alt=-0.114379882812     GD108:class=|c! GD108:colour=~|Z        GD108:attrs=`   GD108:depth=QY|c%|_i    GD108:state=|cAA        GD108:country=|cAA
-GC44E5         N41 01 03.7     W85 15 07.0     alt=-0.114379882812     GD108:class=|c! GD108:colour=~|Z        GD108:attrs=`   GD108:depth=QY|c%|_i    GD108:state=|cAA        GD108:country=|cAA
-CWORK          N41 07 23.0     W85 09 24.7     symbol=flag     alt=254.633056641       GD108:class=|c! GD108:colour=~|Z        GD108:attrs=`   GD108:depth=QY|c%|_i    GD108:state=|cAA        GD108:country=|cAA
-GC2193         N40 25 29.0     W86 54 52.0     alt=-0.114379882812     GD108:class=|c! GD108:colour=~|Z        GD108:attrs=`   GD108:depth=QY|c%|_i    GD108:state=|cAA        GD108:country=|cAA
-GC47A5         N40 25 15.3     W86 54 17.6     alt=-0.114379882812     GD108:class=|c! GD108:colour=~|Z        GD108:attrs=`   GD108:depth=QY|c%|_i    GD108:state=|cAA        GD108:country=|cAA
-TOSB3          N41 43 21.9     W86 15 20.3     alt=-0.114379882812     GD108:class=|c! GD108:colour=~|Z        GD108:attrs=`   GD108:depth=QY|c%|_i    GD108:state=|cAA        GD108:country=|cAA
-004            N41 07 22.6     W85 09 24.3     symbol=flag     alt=250.787719727       GD108:class=|c! GD108:colour=~|Z        GD108:attrs=`   GD108:depth=QY|c%|_i    GD108:state=|cAA        GD108:country=|cAA
-GC17E0         N41 52 01.5     W86 36 12.5     alt=-0.114379882812     GD108:class=|c! GD108:colour=~|Z        GD108:attrs=`   GD108:depth=QY|c%|_i    GD108:state=|cAA        GD108:country=|cAA
-GC2C91         N41 05 01.4     W85 08 18.7     alt=-0.114379882812     GD108:class=|c! GD108:colour=~|Z        GD108:attrs=`   GD108:depth=QY|c%|_i    GD108:state=|cAA        GD108:country=|cAA
-GCA80          N40 29 14.3     W86 51 50.5     alt=-0.114379882812     GD108:class=|c! GD108:colour=~|Z        GD108:attrs=`   GD108:depth=QY|c%|_i    GD108:state=|cAA        GD108:country=|cAA
-GC488D         N41 33 43.7     W85 50 18.3     alt=-0.114379882812     GD108:class=|c! GD108:colour=~|Z        GD108:attrs=`   GD108:depth=QY|c%|_i    GD108:state=|cAA        GD108:country=|cAA
-FRSB1          N41 40 34.1     W86 15 01.1     alt=-0.114379882812     GD108:class=|c! GD108:colour=~|Z        GD108:attrs=`   GD108:depth=QY|c%|_i    GD108:state=|cAA        GD108:country=|cAA
-GC28CB         N40 50 32.8     W85 25 20.8     alt=-0.114379882812     GD108:class=|c! GD108:colour=~|Z        GD108:attrs=`   GD108:depth=QY|c%|_i    GD108:state=|cAA        GD108:country=|cAA
-GC1A9C         N41 06 36.2     W85 09 20.8     alt=-0.114379882812     GD108:class=|c! GD108:colour=~|Z        GD108:attrs=`   GD108:depth=QY|c%|_i    GD108:state=|cAA        GD108:country=|cAA
-UNITA          N41 02 52.2     W85 16 41.6     symbol=flag     alt=256.795898438       GD108:class=|c! GD108:colour=~|Z        GD108:attrs=`   GD108:depth=QY|c%|_i    GD108:state=|cAA        GD108:country=|cAA
-GC2665         N40 45 56.4     W85 35 58.3     alt=-0.114379882812     GD108:class=|c! GD108:colour=~|Z        GD108:attrs=`   GD108:depth=QY|c%|_i    GD108:state=|cAA        GD108:country=|cAA
-GC2F53         N41 43 57.0     W86 04 48.3     alt=-0.114379882812     GD108:class=|c! GD108:colour=~|Z        GD108:attrs=`   GD108:depth=QY|c%|_i    GD108:state=|cAA        GD108:country=|cAA
-005            N41 02 51.4     W85 16 41.6     symbol=flag     alt=263.044433594       GD108:class=|c! GD108:colour=~|Z        GD108:attrs=`   GD108:depth=QY|c%|_i    GD108:state=|cAA        GD108:country=|cAA
-GCB78          N40 26 17.9     W86 54 02.2     alt=-0.114379882812     GD108:class=|c! GD108:colour=~|Z        GD108:attrs=`   GD108:depth=QY|c%|_i    GD108:state=|cAA        GD108:country=|cAA
-FRSB2          N41 38 10.3     W86 15 04.4     alt=-0.114379882812     GD108:class=|c! GD108:colour=~|Z        GD108:attrs=`   GD108:depth=QY|c%|_i    GD108:state=|cAA        GD108:country=|cAA
-GC2ADC         N40 26 16.4     W86 48 21.6     alt=-0.114379882812     GD108:class=|c! GD108:colour=~|Z        GD108:attrs=`   GD108:depth=QY|c%|_i    GD108:state=|cAA        GD108:country=|cAA
-FRSB4          N41 37 27.7     W86 15 08.7     alt=-0.114379882812     GD108:class=|c! GD108:colour=~|Z        GD108:attrs=`   GD108:depth=QY|c%|_i    GD108:state=|cAA        GD108:country=|cAA
-GC333A         N41 01 42.7     W85 11 49.3     alt=-0.114379882812     GD108:class=|c! GD108:colour=~|Z        GD108:attrs=`   GD108:depth=QY|c%|_i    GD108:state=|cAA        GD108:country=|cAA
-ABACUS         N41 04 20.6     W85 13 50.8     symbol=building alt=243.577880859       GD108:class=|c! GD108:colour=~|Z        GD108:attrs=`   GD108:depth=QY|c%|_i    GD108:state=|cAA        GD108:country=|cAA
-FRSB5          N41 38 53.4     W85 56 55.0     alt=-0.114379882812     GD108:class=|c! GD108:colour=~|Z        GD108:attrs=`   GD108:depth=QY|c%|_i    GD108:state=|cAA        GD108:country=|cAA
-GCD85          N41 05 03.3     W85 08 11.1     alt=-0.114379882812     GD108:class=|c! GD108:colour=~|Z        GD108:attrs=`   GD108:depth=QY|c%|_i    GD108:state=|cAA        GD108:country=|cAA
-GC34D4         N41 58 16.8     W86 11 05.3     alt=-0.114379882812     GD108:class=|c! GD108:colour=~|Z        GD108:attrs=`   GD108:depth=QY|c%|_i    GD108:state=|cAA        GD108:country=|cAA
-GCB8           N40 26 09.5     W87 09 49.1     alt=-0.114379882812     GD108:class=|c! GD108:colour=~|Z        GD108:attrs=`   GD108:depth=QY|c%|_i    GD108:state=|cAA        GD108:country=|cAA
-FRSB6          N41 34 46.3     W85 50 01.8     alt=-0.114379882812     GD108:class=|c! GD108:colour=~|Z        GD108:attrs=`   GD108:depth=QY|c%|_i    GD108:state=|cAA        GD108:country=|cAA
-GC2BE8         N40 52 45.9     W85 32 26.1     alt=-0.114379882812     GD108:class=|c! GD108:colour=~|Z        GD108:attrs=`   GD108:depth=QY|c%|_i    GD108:state=|cAA        GD108:country=|cAA
-GC42A1         N41 05 02.1     W85 03 14.2     alt=-0.114379882812     GD108:class=|c! GD108:colour=~|Z        GD108:attrs=`   GD108:depth=QY|c%|_i    GD108:state=|cAA        GD108:country=|cAA
-CASH1          N41 04 41.8     W85 08 19.3     symbol=flag     alt=245.740844727       GD108:class=|c! GD108:colour=~|Z        GD108:attrs=`   GD108:depth=QY|c%|_i    GD108:state=|cAA        GD108:country=|cAA
-
-!Position: DMM
-!R:    34      
-!Position: DMS
-003            N41 07 21.3     W85 09 23.5     symbol=boat_ramp        alt=220.506469727       GD108:class=|c! GD108:colour=~|Z        GD108:attrs=`   GD108:depth=QY|c%|_i    GD108:state=|cAA        GD108:country=|cAA
-004            N41 07 22.6     W85 09 24.3     symbol=flag     alt=250.787719727       GD108:class=|c! GD108:colour=~|Z        GD108:attrs=`   GD108:depth=QY|c%|_i    GD108:state=|cAA        GD108:country=|cAA
-005            N41 02 51.4     W85 16 41.6     symbol=flag     alt=263.044433594       GD108:class=|c! GD108:colour=~|Z        GD108:attrs=`   GD108:depth=QY|c%|_i    GD108:state=|cAA        GD108:country=|cAA
-ABACUS         N41 04 20.6     W85 13 50.8     symbol=building alt=243.577880859       GD108:class=|c! GD108:colour=~|Z        GD108:attrs=`   GD108:depth=QY|c%|_i    GD108:state=|cAA        GD108:country=|cAA
-CASH1          N41 04 41.8     W85 08 19.3     symbol=flag     alt=245.740844727       GD108:class=|c! GD108:colour=~|Z        GD108:attrs=`   GD108:depth=QY|c%|_i    GD108:state=|cAA        GD108:country=|cAA
-CENCEN         N41 41 39.0     W86 14 53.3     alt=-0.114379882812     GD108:class=|c! GD108:colour=~|Z        GD108:attrs=`   GD108:depth=QY|c%|_i    GD108:state=|cAA        GD108:country=|cAA
-CWORK          N41 07 23.0     W85 09 24.7     symbol=flag     alt=254.633056641       GD108:class=|c! GD108:colour=~|Z        GD108:attrs=`   GD108:depth=QY|c%|_i    GD108:state=|cAA        GD108:country=|cAA
-FRSB1          N41 40 34.1     W86 15 01.1     alt=-0.114379882812     GD108:class=|c! GD108:colour=~|Z        GD108:attrs=`   GD108:depth=QY|c%|_i    GD108:state=|cAA        GD108:country=|cAA
-GC11EF         N40 01 45.3     W86 53 17.4     alt=-0.114379882812     GD108:class=|c! GD108:colour=~|Z        GD108:attrs=`   GD108:depth=QY|c%|_i    GD108:state=|cAA        GD108:country=|cAA
-GCD85          N41 05 03.3     W85 08 11.1     alt=-0.114379882812     GD108:class=|c! GD108:colour=~|Z        GD108:attrs=`   GD108:depth=QY|c%|_i    GD108:state=|cAA        GD108:country=|cAA
-
-!R:    23      Route 23
-!NB:   blah blah blah
-
-GC11EF         N40 01 45.3     W86 53 17.4     alt=-0.114379882812     GD108:class=|c! GD108:colour=~|Z        GD108:attrs=`   GD108:depth=QY|c%|_i    GD108:state=|cAA        GD108:country=|cAA
-GC12FF         N41 33 23.9     W86 21 26.9     alt=-0.114379882812     GD108:class=|c! GD108:colour=~|Z        GD108:attrs=`   GD108:depth=QY|c%|_i    GD108:state=|cAA        GD108:country=|cAA
-GC1A9C         N41 06 36.2     W85 09 20.8     alt=-0.114379882812     GD108:class=|c! GD108:colour=~|Z        GD108:attrs=`   GD108:depth=QY|c%|_i    GD108:state=|cAA        GD108:country=|cAA
-
diff --git a/gpsutil.cc b/gpsutil.cc
deleted file mode 100644 (file)
index c9ccd17..0000000
+++ /dev/null
@@ -1,186 +0,0 @@
-/*
-    Access gpsutil files.
-
-    Copyright (C) 2002, 2003, 2004 Robert Lipe, robertlipe+source@gpsbabel.org
-
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with this program; if not, write to the Free Software
-    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
-
- */
-
-
-#include "defs.h"
-#include "cet_util.h"
-#include "magellan.h"
-#include <cmath>
-#include <cstdio>
-#include <cstdlib>
-
-static gbfile* file_in, *file_out;
-static short_handle mkshort_handle;
-
-#define MYNAME "GPSUTIL"
-
-static void
-rd_init(const QString& fname)
-{
-  file_in = gbfopen(fname, "rb", MYNAME);
-}
-
-static void
-rd_deinit()
-{
-  gbfclose(file_in);
-}
-
-static void
-wr_init(const QString& fname)
-{
-  file_out = gbfopen(fname, "w", MYNAME);
-  mkshort_handle = mkshort_new_handle();
-}
-
-static void
-wr_deinit()
-{
-  gbfclose(file_out);
-  mkshort_del_handle(&mkshort_handle);
-}
-
-static void
-data_read()
-{
-  char* ibuf;
-  char desc[31];
-  double lat,lon;
-  char latdir, londir;
-  long alt;
-  char alttype;
-  char icon[3];
-  int line = 0;
-  /*
-   * Make sure that all waypoints in single read have same
-   * timestamp.
-   */
-  time_t now = current_time().toTime_t();
-  icon[0] = 0;
-
-  while ((ibuf = gbfgetstr(file_in))) {
-    char* sn;
-
-    if ((line++ == 0) && file_in->unicode) {
-      cet_convert_init(CET_CHARSET_UTF8, 1);
-    }
-
-    /*  A sharp in column zero or an blank line is a comment */
-    ibuf = lrtrim(ibuf);
-    int len = strlen(ibuf);
-    if ((len == 0) || (*ibuf == '#')) {
-      continue;
-    }
-
-    if (len > 71) {
-      int offs = len - 71;
-      sn = xstrndup(ibuf, offs + 8);
-      ibuf += (offs + 9);
-    } else {
-      sn = xstrndup(ibuf, 8);
-      ibuf += 9;
-    }
-
-    int n = sscanf(ibuf, "%lf%c %lf%c %ld%c %30[^,] %2s",
-                   &lat, &latdir, &lon, &londir,
-                   &alt, &alttype, desc, icon);
-    /* Require at least first three fields, otherwise ignore */
-    if (n < 2) {
-      xfree(sn);
-      continue;
-    }
-    rtrim(sn);
-    rtrim(desc);
-    rtrim(icon);
-    auto* wpt_tmp = new Waypoint;
-    wpt_tmp->altitude = alt;
-    wpt_tmp->shortname = sn;
-    xfree(sn);
-    wpt_tmp->description = desc;
-    wpt_tmp->SetCreationTime(now);
-
-    if (latdir == 'S') {
-      lat = -lat;
-    }
-    if (londir == 'W') {
-      lon = -lon;
-    }
-
-    lat /= 100.0;
-    lon /= 100.0;
-    int ilon = (int)(lon);
-    wpt_tmp->longitude = ilon + (lon - ilon)*(100.0/60.0);
-    int ilat = (int)(lat);
-    wpt_tmp->latitude = ilat + (lat - ilat) * (100.0/60.0);
-    wpt_tmp->icon_descr = mag_find_descr_from_token(icon);
-    waypt_add(wpt_tmp);
-  }
-}
-
-static void
-gpsutil_disp(const Waypoint* wpt)
-{
-  char* tdesc = xstrdup(wpt->description);
-
-  QString icon_token = mag_find_token_from_descr(wpt->icon_descr);
-
-  double lon = degrees2ddmm(wpt->longitude);
-  double lat = degrees2ddmm(wpt->latitude);
-
-  gbfprintf(file_out, "%-8.8s %08.3f%c %09.3f%c %07.0f%c %-30.30s %s\n",
-            global_opts.synthesize_shortnames ?
-            CSTRc(mkshort_from_wpt(mkshort_handle, wpt)) :
-            CSTRc(wpt->shortname),
-            fabs(lat),
-            lat < 0.0 ? 'S' : 'N',
-            fabs(lon),
-            lon < 0.0 ? 'W' : 'E',
-            ((wpt->altitude == unknown_alt) ||
-             (wpt->altitude < 0.0)) ? 0 : wpt->altitude,
-            'm',
-            CSTRc(wpt->description) ? tdesc : "",
-            CSTR(icon_token));
-
-  xfree(tdesc);
-}
-
-static void
-data_write()
-{
-  waypt_disp_all(gpsutil_disp);
-}
-
-
-ff_vecs_t gpsutil_vecs = {
-  ff_type_file,
-  FF_CAP_RW_WPT,
-  rd_init,
-  wr_init,
-  rd_deinit,
-  wr_deinit,
-  data_read,
-  data_write,
-  nullptr,
-  nullptr,
-  CET_CHARSET_ASCII, 0 /* CET-REVIEW */
-  , NULL_POS_OPS,
-  nullptr
-};
index c5dc8dbfff450966c840433c5d1c8ed6f6b15ff1..1929d078a876317d942134b98fb097c631fb4acf 100644 (file)
@@ -575,42 +575,6 @@ static char gpsdrivetrack[] =
   "# IFIELD    GMT_TIME, \"\", \"%a %b %d %H:%M:%S %Y\"\n"
   "IFIELD      LOCAL_TIME, \"\", \"%a %b %d %H:%M:%S %Y\"\n"
   ;
-static char gpsman[] =
-  "# gpsbabel XCSV style file\n"
-  "#\n"
-  "# Format: GPSMAN Format\n"
-  "# Author: Alex Mottram\n"
-  "#   Date: 12/09/2002\n"
-  "#\n"
-  "#\n"
-  "# As defined in gpsman.c\n"
-  "#\n"
-  "#\n"
-
-  "DESCRIPTION         GPSman\n"
-  "SHORTLEN            8\n"
-  "SHORTWHITE          0\n"
-
-  "# FILE LAYOUT DEFINITIIONS:\n"
-  "#\n"
-  "FIELD_DELIMITER             TAB\n"
-  "RECORD_DELIMITER    NEWLINE\n"
-  "BADCHARS            TAB\n"
-
-  "PROLOGUE    !Format: DDD 1 WGS 84\n"
-  "PROLOGUE    !W:\n"
-
-  "#\n"
-  "# INDIVIDUAL DATA FIELDS, IN ORDER OF APPEARANCE:\n"
-  "#\n"
-  "IFIELD      SHORTNAME, \"\", \"%-8.8s\"\n"
-  "IFIELD      DESCRIPTION, \"\", \"%s\"\n"
-  "IFIELD      LAT_DIRDECIMAL, \"\", \"%c%f\"\n"
-  "IFIELD      LON_DIRDECIMAL, \"\", \"%c%f\"\n"
-  "IFIELD      IGNORE, \"\", \"%s\"\n"
-
-  "# gpsman.c likes mkshort len = 8, whitespace = 0.\n"
-  ;
 static char iblue747[] =
   "# GPSBabel XCSV Style File https://www.gpsbabel.org/htmldoc-development/Styles.html\n"
   "# Author: Christian Barmala http://www.barmala.de/\n"
@@ -1385,7 +1349,7 @@ static char tomtom_itn_places[] =
   "IFIELD      SHORTNAME, \"\", \"%s\"\n"
   "IFIELD      CONSTANT, \"2\", \"%s\"\n"
   ;
-const QVector<style_vecs_t> style_list = {{ "tomtom_itn_places", tomtom_itn_places }, { "tomtom_itn", tomtom_itn }, { "tomtom_asc", tomtom_asc }, { "tabsep", tabsep }, { "saplus", saplus }, { "s_and_t", s_and_t }, { "ricoh", ricoh }, { "openoffice", openoffice }, { "nima", nima }, { "navigonwpt", navigonwpt }, { "mxf", mxf }, { "motoactv", motoactv }, { "mapconverter", mapconverter }, { "mainnav", mainnav }, { "land_air_sea", land_air_sea }, { "kompass_wp", kompass_wp }, { "kompass_tk", kompass_tk }, { "igoprimo_poi", igoprimo_poi }, { "igo2008_poi", igo2008_poi }, { "iblue757", iblue757 }, { "iblue747", iblue747 }, { "gpsman", gpsman }, { "gpsdrivetrack", gpsdrivetrack }, { "gpsdrive", gpsdrive }, { "geonet", geonet }, { "garmin_poi", garmin_poi }, { "garmin_g1000", garmin_g1000 }, { "garmin301", garmin301 }, { "fugawi", fugawi }, { "flysight", flysight }, { "dna", dna }, { "custom", custom }, { "cup", cup }, { "csv", csv }, { "cambridge", cambridge }, { "arc", arc }};
+const QVector<style_vecs_t> style_list = {{ "tomtom_itn_places", tomtom_itn_places }, { "tomtom_itn", tomtom_itn }, { "tomtom_asc", tomtom_asc }, { "tabsep", tabsep }, { "saplus", saplus }, { "s_and_t", s_and_t }, { "ricoh", ricoh }, { "openoffice", openoffice }, { "nima", nima }, { "navigonwpt", navigonwpt }, { "mxf", mxf }, { "motoactv", motoactv }, { "mapconverter", mapconverter }, { "mainnav", mainnav }, { "land_air_sea", land_air_sea }, { "kompass_wp", kompass_wp }, { "kompass_tk", kompass_tk }, { "igoprimo_poi", igoprimo_poi }, { "igo2008_poi", igo2008_poi }, { "iblue757", iblue757 }, { "iblue747", iblue747 }, { "gpsdrivetrack", gpsdrivetrack }, { "gpsdrive", gpsdrive }, { "geonet", geonet }, { "garmin_poi", garmin_poi }, { "garmin_g1000", garmin_g1000 }, { "garmin301", garmin301 }, { "fugawi", fugawi }, { "flysight", flysight }, { "dna", dna }, { "custom", custom }, { "cup", cup }, { "csv", csv }, { "cambridge", cambridge }, { "arc", arc }};
 #else /* CSVFMTS_ENABLED */
 const QVector<style_vecs_t> style_list;
 #endif /* CSVFMTS_ENABLED */
diff --git a/jogmap.cc b/jogmap.cc
deleted file mode 100644 (file)
index e590a41..0000000
--- a/jogmap.cc
+++ /dev/null
@@ -1,113 +0,0 @@
-/*
-
-       Support for XML files from jogmap.de
-
-       Copyright (C) 2009 Robert Lipe  robertlipe+source@gpsbabel.org
-
-       This program is free software; you can redistribute it and/or modify
-       it under the terms of the GNU General Public License as published by
-       the Free Software Foundation; either version 2 of the License, or
-       (at your option) any later version.
-
-       This program is distributed in the hope that it will be useful,
-       but WITHOUT ANY WARRANTY; without even the implied warranty of
-       MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-       GNU General Public License for more details.
-
-       You should have received a copy of the GNU General Public License
-       along with this program; if not, write to the Free Software
-       Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
-
-*/
-
-
-#include "defs.h"
-#include "garmin_tables.h"
-#include "jeeps/gpsmath.h"
-#include "xmlgeneric.h"
-#include <QXmlStreamAttributes>
-
-static route_head* trk;
-
-static QVector<arglist_t> jogmap_args = {
-};
-
-#define MYNAME "xol"
-
-// static xg_callback  jogmap_shape, xol_shape_end;
-// static xg_callback  jogmap_waypt, xol_overlay;
-
-#define XOL "/overlays/overlay"
-
-
-
-static void
-jogmap_markers(xg_string, const QXmlStreamAttributes*)
-{
-  trk = new route_head;
-  track_add_head(trk);
-}
-
-static void
-jogmap_marker(xg_string, const QXmlStreamAttributes* attrv)
-{
-  auto* wpt = new Waypoint;
-
-  if (attrv->hasAttribute("lat")) {
-    wpt->latitude = attrv->value("lat").toString().toDouble();
-  }
-
-  if (attrv->hasAttribute("lng")) {
-    wpt->longitude = attrv->value("lng").toString().toDouble();
-  }
-
-  if (trk) {
-    track_add_wpt(trk, wpt);
-  }
-}
-
-static
-xg_tag_mapping jogmap_map[] = {
-  { jogmap_markers,    cb_start,       "/markers" },
-  { jogmap_marker,     cb_start,       "/markers/marker" },
-  { nullptr,   (xg_cb_type)0,          nullptr }
-};
-
-static void
-jogmap_rd_init(const QString& fname)
-{
-  trk = nullptr;
-  xml_init(fname, jogmap_map, nullptr);
-}
-
-static void
-jogmap_read()
-{
-  xml_read();
-}
-
-static void
-jogmap_rd_deinit()
-{
-  xml_deinit();
-}
-
-ff_vecs_t jogmap_vecs = {
-  ff_type_file,
-  {
-    ff_cap_none,               /* waypoints */
-    ff_cap_read,               /* tracks */
-    ff_cap_none
-  },   /* routes */
-  jogmap_rd_init,
-  nullptr,
-  jogmap_rd_deinit,
-  nullptr,
-  jogmap_read,
-  nullptr,
-  nullptr,
-  &jogmap_args,
-  CET_CHARSET_UTF8, 0
-  , NULL_POS_OPS,
-  nullptr
-};
diff --git a/jtr.cc b/jtr.cc
deleted file mode 100644 (file)
index 6d507f3..0000000
--- a/jtr.cc
+++ /dev/null
@@ -1,335 +0,0 @@
-/*
-
-    Support for the Jelbert GeoTagger JTR data file format.
-
-    Copyright (C) 2008 Olaf Klein, o.b.klein@gpsbabel.org
-
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with this program; if not, write to the Free Software
-    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
-
- */
-#include "defs.h"
-#include "csv_util.h"
-#include <QHash>
-//#include <cassert>
-#include <cmath>
-#include <cstdio>
-#include <cstdlib>
-#include "nmea.h"
-
-#define MYNAME "jtr"
-
-static
-QVector<arglist_t> jtr_args = {
-};
-
-static gbfile* fin, *fout;
-static QHash<QString, const Waypoint*> trkpts;
-
-void
-jtr_parse_date(const char* str, QDate& date)
-{
-  int dmy = atoi(str);
-  if (dmy > 0) {
-    int year= dmy % 100 + 2000;
-    dmy = dmy / 100;
-    int month = dmy % 100;
-    dmy = dmy / 100;
-    int day = dmy;
-    date = QDate(year, month, day);
-  }
-}
-
-void
-jtr_parse_time(const char* str, QTime& time)
-{
-  char* dot;
-  long int hms = strtol(str, &dot, 10);
-  int sec = hms % 100;
-  hms = hms / 100;
-  int min  = hms % 100;
-  hms = hms / 100;
-  int hour = hms % 100;
-
-  if (*dot == '.') {
-    int milli = atoi(dot + 1) * 10;
-    sec += milli / 1000;
-  }
-
-  time = QTime(hour, min, sec);
-}
-
-/*******************************************************************************
-* %%%        global callbacks called by gpsbabel main process              %%% *
-*******************************************************************************/
-
-static void
-jtr_rd_init(const QString& fname)
-{
-  fin = gbfopen(fname, "r", MYNAME);
-}
-
-static void
-jtr_rd_deinit()
-{
-  trkpts.clear();
-  gbfclose(fin);
-}
-
-static void
-jtr_read()
-{
-  char* str;
-  int line = 0;
-  route_head* trk = nullptr;
-
-  while ((str = gbfgetstr(fin))) {
-    QDate date;
-    QTime time;
-    char valid = 'V';
-    double lon;
-    float course, mcourse, mvar, mdev;
-    char mdevdir;
-
-    line++;
-
-    str = lrtrim(str);
-    if (*str == '\0') {
-      continue;
-    }
-
-    if (strncmp(str, "GEOTAG2,", 8) != 0) {
-      fatal(MYNAME ": Unknown or unsupported file (missing \"GEOTAG2\")!\n");
-    }
-
-    double lat = lon = 999;
-    float speed = course = mcourse = mvar = mdev = -1;
-    char mvardir = mdevdir = 0;
-
-    int column = -1;
-    char* tmp = str;
-    while ((str = csv_lineparse(tmp, ",", "", column++))) {
-      tmp = nullptr;
-
-      if (*str == '\0') {
-        continue;
-      }
-
-      switch (column) {
-      case 0:
-        break;         /* GEOTAG2 */
-      case 1:
-        jtr_parse_time(str, time);
-        break;
-      case 2:
-        valid = *str;
-        break;
-      case 3:
-        lat = ddmm2degrees(atof(str));
-        break;
-      case 4:
-        if (*str == 'S') {
-          lat *= -1;
-        }
-        break;
-      case 5:
-        lon = ddmm2degrees(atof(str));
-        break;
-      case 6:
-        if (*str == 'W') {
-          lon *= -1;
-        }
-        break;
-      case 7:
-        speed = KNOTS_TO_MPS(atof(str));
-        break;
-      case 8:
-        course = atof(str);
-        break;
-      case 9:
-        jtr_parse_date(str, date);
-        break;
-      case 13:
-        mcourse = atof(str);
-        break;
-      case 14:
-        mdev = atof(str);
-        break;
-      case 15:
-        mdevdir = *str;
-        break;
-      case 16:
-        mvar = atof(str);
-        break;
-      case 17:
-        mvardir = *str;
-        break;
-      default:
-        break;
-      }
-    }
-
-    if ((lat == 999) || (lon == 999) || (valid != 'A')) {
-      continue;
-    }
-
-    QDateTime dt = QDateTime(date, time, Qt::UTC);
-
-    /* check for duplicates as suggested in format description */
-    QString buf = QString("%1\01%2\01%3")
-                  .arg(QString::number(lat, 'f', 6),
-                       QString::number(lon, 'f', 6),
-                       QString::number(dt.toSecsSinceEpoch()));
-    if (trkpts.contains(buf)) {
-      continue;
-    }
-
-    auto* wpt = new Waypoint;
-
-    wpt->latitude = lat;
-    wpt->longitude = lon;
-    wpt->SetCreationTime(dt);
-    if (speed >= 0) {
-      WAYPT_SET(wpt, speed, speed);
-    }
-    if (mcourse >= 0) {
-      course = mcourse;
-      if (mvar >= 0) {
-        if (mvardir == 'W') {
-          course += mvar;
-        } else if (mvardir == 'E') {
-          course -= mvar;
-        }
-      }
-      if (mdev >= 0) {
-        if (mdevdir == 'W') {
-          course += mdev;
-        } else if (mdevdir == 'E') {
-          course -= mdev;
-        }
-      }
-    }
-    if (course >= 0) {
-      WAYPT_SET(wpt, course, course);
-    }
-
-    if (trk == nullptr) {
-      trk = new route_head;
-      track_add_head(trk);
-    }
-
-    trkpts.insert(buf, wpt);
-    track_add_wpt(trk, wpt);
-  }
-}
-
-static void
-jtr_wr_init(const QString& fname)
-{
-  fout = gbfopen(fname, "wb", MYNAME);
-}
-
-static void
-jtr_wr_deinit()
-{
-  gbfclose(fout);
-}
-
-static void
-jtr_trkpt_disp_cb(const Waypoint* wpt)
-{
-  char* str, *tmp;
-  char scourse[6], sspeed[8];
-  QString sdate;
-  QString stime;
-
-  if (wpt->creation_time.isValid()) {
-    gpsbabel::DateTime dt = wpt->GetCreationTime().toUTC();
-
-    // round time to centiseconds.
-    int msec = dt.time().msec();
-    int csec = lround(msec/10.0);
-    dt = dt.addMSecs(csec*10-msec);
-    sdate = dt.toString(QStringLiteral("ddMMyy"));
-    stime = dt.toString(QStringLiteral("HHmmss.zzz"));
-    // toss milliseconds position which should now be zero.
-    //assert(stime.endsWith('0'));
-    stime.chop(1);
-    // suppress fractional seconds if they are zero.
-    stime = stime.replace(QLatin1String(".00"), QLatin1String(""));
-  }
-  if (WAYPT_HAS(wpt, speed) && (wpt->speed >= 0)) {
-    snprintf(sspeed, sizeof(sspeed), "%.1f", MPS_TO_KNOTS(wpt->speed));
-  } else {
-    sspeed[0] = 0;
-  }
-  if (WAYPT_HAS(wpt, course) && (wpt->course >= 0)) {
-    snprintf(scourse, sizeof(scourse), "%.1f", wpt->course);
-  } else {
-    scourse[0] = 0;
-  }
-
-  xasprintf(&str, "GEOTAG2,%s,%c,%09.4f,%c,%010.4f,%c,%s,%s,%s,,E,A",
-            CSTR(stime),
-            wpt->creation_time.isValid() ? 'A' : 'V',
-            fabs(degrees2ddmm(wpt->latitude)),
-            wpt->latitude < 0 ? 'S' : 'N',
-            fabs(degrees2ddmm(wpt->longitude)),
-            wpt->longitude < 0 ? 'W' : 'E',
-            sspeed,
-            scourse,
-            CSTR(sdate));
-
-  xasprintf(&tmp, "%s*%02X", str, NmeaFormat::nmea_cksum(str));
-  xfree(str);
-  str = tmp;
-
-  xasprintf(&tmp, "%s,,,E,,E*%02X\r", str, NmeaFormat::nmea_cksum(str));
-  xfree(str);
-  str = tmp;
-
-  gbfputs(str, fout);
-  xfree(str);
-}
-
-static void
-jtr_write()
-{
-  track_disp_all(nullptr, nullptr, jtr_trkpt_disp_cb);
-}
-
-/**************************************************************************/
-
-ff_vecs_t jtr_vecs = {
-  ff_type_file,
-  {
-    ff_cap_none,                       /* waypoints */
-    (ff_cap)(ff_cap_read | ff_cap_write),      /* tracks */
-    ff_cap_none                        /* routes */
-  },
-  jtr_rd_init,
-  jtr_wr_init,
-  jtr_rd_deinit,
-  jtr_wr_deinit,
-  jtr_read,
-  jtr_write,
-  nullptr,
-  &jtr_args,
-  CET_CHARSET_ASCII, 0                 /* ascii is the expected character set */
-  /* not fixed, can be changed through command line parameter */
-  , NULL_POS_OPS,
-  nullptr
-};
-
-/**************************************************************************/
diff --git a/maggeo.cc b/maggeo.cc
deleted file mode 100644 (file)
index 5ede9ef..0000000
--- a/maggeo.cc
+++ /dev/null
@@ -1,340 +0,0 @@
-/*
-    Magellan ".gs" files as they appear on USB of Explorist 400,500,600.
-
-    Copyright (C) 2005, 2006, 2008 robertlipe+source@gpsbabel.org
-
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with this program; if not, write to the Free Software
-    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
-
- */
-
-#include "defs.h"
-#include "csv_util.h"
-#include "magellan.h"
-#include <QXmlStreamAttributes>
-#include <cmath>
-#include <cstdio>
-#include <cstdlib>
-
-#define MYNAME "maggeo"
-
-/* Turn this on (remove) after 5.2 becomes widespread. */
-#define FIRMWARE_DOES_88591 0
-
-static gbfile* maggeofile_in;
-static gbfile* maggeofile_out;
-static short_handle desc_handle = nullptr;
-
-static QDateTime maggeo_parsedate(char* dmy);
-
-static void
-maggeo_writemsg(const char* const buf)
-{
-  unsigned int osum = mag_checksum(buf);
-  gbfprintf(maggeofile_out, "$%s*%02X\r\n",buf, osum);
-}
-
-static void
-maggeo_rd_init(const QString& fname)
-{
-  maggeofile_in = gbfopen(fname, "rb", MYNAME);
-}
-
-static void
-maggeo_rd_deinit()
-{
-  gbfclose(maggeofile_in);
-}
-
-static void
-maggeo_wr_init(const QString& fname)
-{
-  if (waypt_count() > 200) {
-    fatal(MYNAME ": eXplorist does not support more than 200 waypoints in one .gs file.\nDecrease the number of waypoints sent.\n");
-  }
-  maggeofile_out = gbfopen(fname, "wb", MYNAME);
-  desc_handle = mkshort_new_handle();
-  setshort_length(desc_handle, 20);
-  setshort_badchars(desc_handle, "\"$,");
-}
-
-static void
-maggeo_wr_deinit()
-{
-  maggeo_writemsg("PMGNCMD,END");
-  mkshort_del_handle(&desc_handle);
-  gbfclose(maggeofile_out);
-}
-
-static void
-maggeo_read()
-{
-  char* buff;
-
-  while ((buff = gbfgetstr(maggeofile_in))) {
-    char* s = nullptr;
-
-    buff = lrtrim(buff);
-    if (*buff == '\0') {
-      continue;
-    }
-    if (strncmp(buff, "$PMGNGEO,", 9)) {
-      continue;
-    }
-
-    buff += 9; /* skip field no. 1 */
-    int fld = 1;
-
-    auto* wpt_tmp = new Waypoint;
-    geocache_data* gcdata = wpt_tmp->AllocGCData();
-
-    while ((s = csv_lineparse(buff, ",", "", fld++))) {
-      buff = nullptr;
-
-      s = lrtrim(s);
-      if (*s == '\0') {
-        continue;
-      }
-
-      switch (fld) {
-      case 2:
-        wpt_tmp->latitude = ddmm2degrees(atof(s));
-        break;
-      case 3:
-        if (s[0] == 'S') {
-          wpt_tmp->latitude = -wpt_tmp->latitude;
-        }
-        break;
-      case 4:
-        wpt_tmp->longitude = ddmm2degrees(atof(s));
-        break;
-      case 5:
-        if (s[0] == 'W') {
-          wpt_tmp->longitude = -wpt_tmp->longitude;
-        }
-        break;
-      case 6:
-        wpt_tmp->altitude = atof(s);
-        break;
-      case 7:
-        if (s[0] == 'F') {
-          wpt_tmp->altitude = METERS_TO_FEET(wpt_tmp->altitude);
-        }
-        break;
-      case 8:
-        wpt_tmp->shortname = s;
-        break;
-      case 9:
-        wpt_tmp->description = s;
-        break;
-      case 10:
-        gcdata->placer = s;
-        break;
-      case 11:
-        gcdata->hint = s;
-        break;
-      case 12: // cache type
-        if (strcmp(s, "Mystery Cache") == 0) {
-          gcdata->type = gt_surprise;
-        } else {
-          gcdata->type = gs_mktype(s);
-        }
-        break;
-      case 13:
-        wpt_tmp->creation_time = maggeo_parsedate(s);
-        break;
-      case 14: // last found date was ignored.  Implemented 2013-02-27.
-        gcdata->last_found = maggeo_parsedate(s);
-        break;
-      case 15:
-        gcdata->diff = 10 * atof(s);
-        break;
-      case 16:
-        gcdata->terr = 10 * atof(s);
-        break;
-      }
-    }
-    waypt_add(wpt_tmp);
-  }
-
-}
-
-static
-QString
-maggeo_fmtdate(const QDateTime& dt)
-{
-  QDate date = dt.date();
-  int y = date.year() - 1900;
-  int m = date.month();
-  int d = date.day();
-  int r = d * 100000 + m * 1000 + y;
-  return QString("%1").arg(r, 7, 10, QChar('0'));
-}
-
-/*
- * The maggeo date format s DDMMYYY where "YYY" is the number
- * of years since 1900.  This, of course, means anything in this
- * century is three digits but anything from before 2000, we'd have
- * two digit years.  This makes this easier to parse as strings.
- */
-static QDateTime maggeo_parsedate(char* dmy)
-{
-  QString date(dmy);
-  int d = date.mid(0,2).toInt();
-  int m = date.mid(2,2).toInt();
-  int y = date.mid(4,3).toInt();
-#if (QT_VERSION < QT_VERSION_CHECK(5, 14, 0))
-  QDateTime r(QDate(y + 1900, m, d));
-#else
-  QDateTime r = QDate(y + 1900, m, d).startOfDay();
-#endif
-  return r;
-}
-
-/*
- * Append an optional UTF string to buf, prepending a comma,
- * cleansing it of NMEA-isms and decomposing to ASCII as we go.
- */
-static
-void
-append(char* buf, const char* str)
-{
-  char* cleansed2;
-
-  strcat(buf, ",");
-
-  if (!str) {
-    return;
-  }
-
-  char* cleansed1 = xstrdup(str);
-#if FIRMWARE_DOES_88591
-  /* Actually, this function needs needs refactored... */
-  cleansed2 = xstrdup(cleansed1);
-#else
-  cleansed2 = xstrdup(m330_cleanse(cleansed1));
-#endif
-
-  strcat(buf, cleansed2);
-
-
-  xfree(cleansed1);
-  xfree(cleansed2);
-
-}
-
-static void
-maggeo_waypt_pr(const Waypoint* waypointp)
-{
-  char obuf[4096];
-  const char* ctype = nullptr;
-
-  double ilat = waypointp->latitude;
-  double ilon = waypointp->longitude;
-
-  double lon = fabs(ilon);
-  double lat = fabs(ilat);
-
-  int lon_deg = lon;
-  int lat_deg = lat;
-
-  lon = (lon - lon_deg) * 60.0;
-  lat = (lat - lat_deg) * 60.0;
-
-  lon = (lon_deg * 100.0 + lon);
-  lat = (lat_deg * 100.0 + lat);
-
-  /*
-   * For some reason, Magellan used exactly the GPX spellings of
-   * everything except this one...
-   */
-  if (waypointp->gc_data->type == gt_surprise) {
-    ctype = "Mystery Cache";
-  } else {
-    ctype = gs_get_cachetype(waypointp->gc_data->type);
-  }
-  QString placeddate = maggeo_fmtdate(waypointp->creation_time);
-  QString lfounddate = maggeo_fmtdate(waypointp->gc_data->last_found);
-  QString cname = mkshort(desc_handle,
-                  waypointp->notes.isEmpty() ? waypointp->description : waypointp->notes);
-  QString placer = waypointp->gc_data->placer;
-
-  /*
-   * As of this writing on 05/04, the firmware in the units will
-   * let you write fields of just about any width, but appears to
-   * only use the following:
-   * shortname - 8 chars
-   * cname - 20 chars (scrolls in some places, not others)
-   * placer - display limited by width
-   * hint - 50 chars
-   * cache type - appears to be parsed by f/w for icon matching.
-   *
-   *
-   */
-  snprintf(obuf, sizeof(obuf),
-           "PMGNGEO,%4.3f,%c,%08.3f,%c,%04.0f,F",
-           lat, ilat < 0 ? 'S' : 'N',
-           lon, ilon < 0 ? 'W' : 'E',
-           waypointp->altitude == unknown_alt ?
-           0 : waypointp->altitude);
-  append(obuf, CSTRc(waypointp->shortname));
-  append(obuf, CSTR(cname));
-  append(obuf, CSTR(placer));
-  append(obuf, CSTR(waypointp->gc_data->hint));
-  append(obuf, ctype);
-  append(obuf, placeddate.toUtf8());
-  append(obuf, lfounddate.toUtf8());
-
-  if (waypointp->gc_data->diff/10.0)
-    sprintf(obuf + strlen(obuf), ",%3.1f",
-            waypointp->gc_data->diff/10.0);
-  else {
-    strcat(obuf, ",");
-  }
-
-  if (waypointp->gc_data->terr/10.0)
-    sprintf(obuf + strlen(obuf), ",%3.1f",
-            waypointp->gc_data->terr/10.0);
-  else {
-    strcat(obuf, ",");
-  }
-
-  maggeo_writemsg(obuf);
-}
-
-static void
-maggeo_write()
-{
-  waypt_disp_all(maggeo_waypt_pr);
-}
-
-ff_vecs_t maggeo_vecs = {
-  ff_type_file,
-  { (ff_cap)(ff_cap_read | ff_cap_write), ff_cap_none, ff_cap_none },
-  maggeo_rd_init,
-  maggeo_wr_init,
-  maggeo_rd_deinit,
-  maggeo_wr_deinit,
-  maggeo_read,
-  maggeo_write,
-  nullptr,
-  nullptr,
-#if FIRMWARE_DOES_88591
-  CET_CHARSET_LATIN1, 0        /* CET-REVIEW */
-#else
-  CET_CHARSET_ASCII, 0 /* CET-REVIEW */
-#endif
-  , NULL_POS_OPS,
-  nullptr
-};
diff --git a/mapsend.cc b/mapsend.cc
deleted file mode 100644 (file)
index ba26430..0000000
+++ /dev/null
@@ -1,545 +0,0 @@
-/*
-    Access Magellan Mapsend files.
-
-    Copyright (C) 2002-2006 Robert Lipe, robertlipe+source@gpsbabel.org
-
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with this program; if not, write to the Free Software
-    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
- */
-
-#include <cmath>                // for lround
-#include <cstdio>               // for sprintf
-#include <cstdlib>              // for atoi
-#include <cstring>              // for strncpy
-#include <ctime>
-
-#include <QString>              // for QString
-#include <QTime>                // for QTime
-#include <QtGlobal>             // for Q_UNUSED
-
-#include "defs.h"
-#include "mapsend.h"
-#include "gbfile.h"             // for gbfputint32, gbfgetint32, gbfgetdbl, gbfputdbl, gbfgetpstr, gbfwrite, gbfputpstr, gbfputc, gbfread, gbfclose, gbfgetc, gbfgetflt, gbfopen, gbfputflt, gbfile, gbfgetuint32, gbfopen_le, gbsize_t
-#include "magellan.h"           // for mag_find_token_from_descr, mag_find_descr_from_token
-#include "src/core/datetime.h"  // for DateTime
-
-
-static gbfile* mapsend_file_in;
-static gbfile* mapsend_file_out;
-static short_handle mkshort_handle;
-static short_handle wpt_handle;
-
-static int route_wp_count;
-static int mapsend_infile_version;
-static int trk_version = 30;
-
-#define MYNAME "mapsend"
-
-static char* mapsend_opt_trkver = nullptr;
-#define MAPSEND_TRKVER_MIN 3
-#define MAPSEND_TRKVER_MAX 4
-
-static
-QVector<arglist_t> mapsend_args = {
-  {
-    "trkver", &mapsend_opt_trkver,
-    "MapSend version TRK file to generate (3,4)",
-    "4", ARGTYPE_INT, "3", "4", nullptr
-  },
-};
-
-static void
-mapsend_init_opts(const char isReading)        /* 1=read, 2=write */
-{
-  /* read & write options here */
-
-  if (isReading) {
-    /* reading-only options here */
-  } else {
-    /* writing-only options here */
-
-    // TRK MapSend version
-    int opt_trkver = atoi(mapsend_opt_trkver);
-    if ((opt_trkver < MAPSEND_TRKVER_MIN) || (opt_trkver > MAPSEND_TRKVER_MAX)) {
-      fatal(MYNAME ": Unsupported MapSend TRK version \"%s\"!\n", mapsend_opt_trkver);
-    }
-    trk_version = opt_trkver * 10;
-  }
-}
-
-static void
-mapsend_rd_init(const QString& fname)
-{
-  mapsend_init_opts(1);
-  mapsend_file_in = gbfopen_le(fname, "rb", MYNAME);
-}
-
-static void
-mapsend_rd_deinit()
-{
-  gbfclose(mapsend_file_in);
-}
-
-static void
-mapsend_wr_init(const QString& fname)
-{
-  mapsend_init_opts(0);
-  mapsend_file_out = gbfopen(fname, "wb", MYNAME);
-  mkshort_handle = mkshort_new_handle();
-
-  wpt_handle = mkshort_new_handle();
-  setshort_whitespace_ok(wpt_handle, 1);
-  setshort_length(wpt_handle, 8);
-
-  route_wp_count = 0;
-}
-
-static void
-mapsend_wr_deinit()
-{
-  gbfclose(mapsend_file_out);
-  mkshort_del_handle(&mkshort_handle);
-  mkshort_del_handle(&wpt_handle);
-}
-
-static void
-mapsend_wpt_read()
-{
-  char tbuf[256];
-  char wpt_icon;
-  Waypoint* wpt_tmp;
-
-  int wpt_count = gbfgetint32(mapsend_file_in);
-
-  while (wpt_count--) {
-    wpt_tmp = new Waypoint;
-
-    wpt_tmp->shortname = gbfgetpstr(mapsend_file_in);
-    wpt_tmp->description = gbfgetpstr(mapsend_file_in);
-
-    int wpt_number = gbfgetint32(mapsend_file_in);
-    (void) wpt_number; // hush warning.
-    wpt_icon = gbfgetc(mapsend_file_in);
-    char wpt_status = gbfgetc(mapsend_file_in);
-    (void) wpt_status; // hush warning.
-
-    wpt_tmp->altitude = gbfgetdbl(mapsend_file_in);
-    wpt_tmp->longitude = gbfgetdbl(mapsend_file_in);
-    wpt_tmp->latitude = -gbfgetdbl(mapsend_file_in);
-
-    if (wpt_icon < 26) {
-      sprintf(tbuf, "%c", wpt_icon + 'a');
-    } else {
-      sprintf(tbuf, "a%c", wpt_icon - 26 + 'a');
-    }
-    wpt_tmp->icon_descr = mag_find_descr_from_token(tbuf);
-
-    waypt_add(wpt_tmp);
-  }
-
-  /* now read the routes... */
-  int rte_count = gbfgetint32(mapsend_file_in);
-
-  while (rte_count--) {
-    auto* rte_head = new route_head;
-    route_add_head(rte_head);
-
-    /* route name */
-    rte_head->rte_name = gbfgetpstr(mapsend_file_in);
-
-    /* route # */
-    int rte_num = gbfgetint32(mapsend_file_in);
-    rte_head->rte_num = rte_num;
-
-    /* points this route */
-    wpt_count = gbfgetint32(mapsend_file_in);
-
-    while (wpt_count--) {
-      wpt_tmp = new Waypoint;
-
-      /* waypoint name */
-      wpt_tmp->shortname = gbfgetpstr(mapsend_file_in);
-
-      /* waypoint # */
-      int wpt_number = gbfgetint32(mapsend_file_in);
-      Q_UNUSED(wpt_number)
-      wpt_tmp->longitude = gbfgetdbl(mapsend_file_in);
-      wpt_tmp->latitude = -gbfgetdbl(mapsend_file_in);
-
-      gbfread(&wpt_icon, 1, sizeof(wpt_icon), mapsend_file_in);
-
-      if (wpt_icon < 26) {
-        sprintf(tbuf, "%c", wpt_icon + 'a');
-      } else {
-        sprintf(tbuf, "a%c", wpt_icon - 26 + 'a');
-      }
-      wpt_tmp->icon_descr = mag_find_descr_from_token(tbuf);
-
-      route_add_wpt(rte_head, wpt_tmp);
-    }
-  }
-}
-
-static void
-mapsend_track_read()
-{
-  auto* track_head = new route_head;
-  track_head->rte_name = gbfgetpstr(mapsend_file_in);
-  track_add_head(track_head);
-
-  unsigned int trk_count = gbfgetuint32(mapsend_file_in);
-
-  while (trk_count--) {
-    auto* wpt_tmp = new Waypoint;
-
-    wpt_tmp->longitude = gbfgetdbl(mapsend_file_in);
-    wpt_tmp->latitude = -gbfgetdbl(mapsend_file_in);
-
-    if (mapsend_infile_version < 36) { /* < version 4.0 */
-      wpt_tmp->altitude = gbfgetint32(mapsend_file_in);
-    } else {
-      wpt_tmp->altitude = gbfgetflt(mapsend_file_in);
-    }
-    if (wpt_tmp->altitude < unknown_alt + 1) {
-      wpt_tmp->altitude = unknown_alt;
-    }
-    time_t t = gbfgetint32(mapsend_file_in);
-    int32_t valid = gbfgetint32(mapsend_file_in);
-    Q_UNUSED(valid);
-
-    /* centiseconds only in >= version 3.0 */
-    unsigned char centisecs;
-    if (mapsend_infile_version >= 34) {
-      gbfread(&centisecs, 1, 1, mapsend_file_in);
-    } else {
-      centisecs = 0;
-    }
-    wpt_tmp->SetCreationTime(t, 10 * centisecs);
-
-    track_add_wpt(track_head, wpt_tmp);
-  }
-}
-
-static void
-mapsend_read()
-{
-  mapsend_hdr hdr;
-  char buf[3];
-
-  /*
-   * Because of the silly struct packing and the goofy variable-length
-   * strings, each member has to be read in one at a time.  Grrr.
-   */
-
-  gbsize_t len = gbfread(&hdr, 1, sizeof(hdr), mapsend_file_in);
-  is_fatal(len < sizeof(hdr), MYNAME ": No mapsend or empty file!");
-
-  int type = le_read16(&hdr.ms_type);
-  strncpy(buf, hdr.ms_version, 2);
-  buf[2] = '\0';
-
-  mapsend_infile_version = atoi(buf);
-
-  switch (type) {
-  case ms_type_wpt:
-    mapsend_wpt_read();
-    break;
-  case ms_type_track:
-    mapsend_track_read();
-    break;
-  case ms_type_log:
-    fatal(MYNAME ", GPS logs not supported.\n");
-  case ms_type_rgn:
-    fatal(MYNAME ", GPS regions not supported.\n");
-  default:
-    fatal(MYNAME ", unknown file type %d\n", type);
-  }
-}
-
-
-static void
-mapsend_waypt_pr(const Waypoint* waypointp)
-{
-  static int cnt = 0;
-  QString sn = global_opts.synthesize_shortnames ?
-                   mkshort_from_wpt(mkshort_handle, waypointp) :
-                   waypointp->shortname;
-
-  /*
-   * The format spec doesn't call out the character set of waypoint
-   * name and description.  Empirically, we can see that it's 8859-1,
-   * but if we create mapsend files containing those, Mapsend becomes
-   * grumpy uploading the resulting waypoints and being unable to deal
-   * with the resulting comm errors.
-   *
-   * Ironically, our own Magellan serial module strips the "naughty"
-   * characters, keeping it more in definition with their own serial
-   * spec. :-)
-   *
-   * So we just decompose the utf8 strings to ascii before stuffing
-   * them into the Mapsend file.
-   */
-
-
-  QString tmp1 = mkshort(wpt_handle, sn);
-  gbfputpstr(tmp1, mapsend_file_out);
-
-  // This is funny looking to ensure that no more than 30 bytes
-  // get written to the file.
-  unsigned int c = waypointp->description.length();
-  if (c > 30) {
-    c = 30;
-  }
-  gbfputc(c, mapsend_file_out);
-  gbfwrite(CSTR(waypointp->description), 1, c, mapsend_file_out);
-
-  /* #, icon, status */
-  gbfputint32(++cnt, mapsend_file_out);
-
-
-  QString iconp;
-  if (!waypointp->icon_descr.isNull()) {
-    iconp = mag_find_token_from_descr(waypointp->icon_descr);
-    if (1 == iconp.size()) {
-      c = iconp[0].toLatin1() - 'a';
-    } else {
-      c = iconp[1].toLatin1() - 'a' + 26;
-    }
-  } else  {
-    c = 0;
-  }
-  if (get_cache_icon(waypointp)) {
-    iconp = mag_find_token_from_descr(get_cache_icon(waypointp));
-    if (1 == iconp.size()) {
-      c = iconp[0].toLatin1() - 'a';
-    } else {
-      c = iconp[1].toLatin1() - 'a' + 26;
-    }
-  }
-
-  gbfputc(c, mapsend_file_out);
-  gbfputc(1, mapsend_file_out);
-
-  double falt = waypointp->altitude;
-  if (falt == unknown_alt) {
-    falt = 0;
-  }
-  gbfputdbl(falt, mapsend_file_out);
-
-  gbfputdbl(waypointp->longitude, mapsend_file_out);
-  gbfputdbl(-waypointp->latitude, mapsend_file_out);
-}
-
-static void
-mapsend_route_hdr(const route_head* rte)
-{
-  QString rname;
-  QString r = rte->rte_name;
-
-  /* route name -- mapsend really seems to want something here.. */
-  if (r.isEmpty()) {
-    rname = "Route";
-  } else {
-    rname = CSTRc(rte->rte_name);
-  }
-  gbfputpstr(rname, mapsend_file_out);
-
-  /* route # */
-  gbfputint32(rte->rte_num, mapsend_file_out);
-
-  /* # of waypoints to follow... */
-  gbfputint32(rte->rte_waypt_ct(), mapsend_file_out);
-}
-
-static void
-mapsend_route_disp(const Waypoint* waypointp)
-{
-  unsigned char c;
-
-  route_wp_count++;
-
-  /* waypoint name */
-  gbfputpstr(waypointp->shortname, mapsend_file_out);
-
-  /* waypoint number */
-  gbfputint32(route_wp_count, mapsend_file_out);
-
-  gbfputdbl(waypointp->longitude, mapsend_file_out);
-  gbfputdbl(-waypointp->latitude, mapsend_file_out);
-
-  if (!waypointp->icon_descr.isNull()) {
-    QString iconp = mag_find_token_from_descr(waypointp->icon_descr);
-    if (1 == iconp.size()) {
-      c = iconp[0].toLatin1() - 'a';
-    } else {
-      c = iconp[1].toLatin1() - 'a' + 26;
-    }
-  } else  {
-    c = 0;
-  }
-  gbfwrite(&c, 1, 1, mapsend_file_out);
-}
-
-static void mapsend_track_hdr(const route_head* trk)
-{
-  /*
-   * we write mapsend v3.0 tracks as mapsend v2.0 tracks get
-   * tremendously out of whack time/date wise.
-   */
-  const char* verstring = "30";
-  mapsend_hdr hdr = {13, {'4','D','5','3','3','3','3','4',' ','M','S'},
-    {'3','0'}, ms_type_track, {0, 0, 0}
-  };
-
-  switch (trk_version) {
-  case 20:
-    verstring = "30";
-    break;
-  case 30:
-    verstring = "34";
-    break;
-  case 40:
-    /* the signature seems to change with the versions, even though it
-     * shouldn't have according to the document. MapSend V4 doesn't
-     * like the old version.
-     */
-    hdr.ms_signature[7] = '6';
-    verstring = "36";
-    break;
-  default:
-    fatal("Unknown track version.\n");
-    break;
-  }
-
-  hdr.ms_version[0] = verstring[0];
-  hdr.ms_version[1] = verstring[1];
-
-  gbfwrite(&hdr, sizeof(hdr), 1, mapsend_file_out);
-  QString tname = trk->rte_name.isEmpty() ? "Track" : trk->rte_name;
-  gbfputpstr(tname, mapsend_file_out);
-
-  /* total nodes (waypoints) this track */
-  int i = trk->rte_waypt_ct();
-
-  gbfputint32(i, mapsend_file_out);
-
-}
-
-static void mapsend_track_disp(const Waypoint* wpt)
-{
-  unsigned char c;
-  static int last_time;
-
-  /*
-   * Firmware Ver 4.06 (at least) has a defect when it's set for .01km
-   * tracking that will sometimes result in timestamps in the track
-   * going BACKWARDS.   When mapsend sees this, it (stupidly) advances
-   * the date by one, ignoring the date on the TRK lines.   This looks
-   * for time travel and just uses the previous time - it's better to
-   * be thought to be standing still than to be time-travelling!
-   *
-   * This is rumoured (but yet unconfirmed) to be fixed in f/w 5.12.
-   */
-  int32_t t = wpt->GetCreationTime().toTime_t();
-  if (t < last_time)  {
-    t = last_time;
-  }
-
-  /* x = longitude */
-  gbfputdbl(wpt->longitude, mapsend_file_out);
-
-  /* x = latitude */
-  gbfputdbl(-wpt->latitude, mapsend_file_out);
-
-  /* altitude
-   * in V4.0+ this field is a float, it was previously an int
-   */
-  if (trk_version < 40) {
-    gbfputint32((int) wpt->altitude, mapsend_file_out);
-  } else {
-    gbfputflt((float) wpt->altitude, mapsend_file_out);
-  }
-
-  /* time */
-  gbfputint32(t, mapsend_file_out);
-  last_time = t;
-
-  /* validity */
-  gbfputint32(1, mapsend_file_out);
-
-  /* 0 centiseconds */
-  if (trk_version >= 30) {
-    c = lround(wpt->GetCreationTime().time().msec() / 10.0);
-    gbfwrite(&c, 1, 1, mapsend_file_out);
-  }
-}
-
-static void
-mapsend_track_write()
-{
-  track_disp_all(mapsend_track_hdr, nullptr, mapsend_track_disp);
-}
-
-static void
-mapsend_wpt_write()
-{
-  mapsend_hdr hdr = {13, {'4','D','5','3','3','3','3','0',' ','M','S'},
-    {'3', '0'}, ms_type_wpt, {0, 0, 0}
-  };
-  int wpt_count = waypt_count();
-
-  if (global_opts.objective == trkdata) {
-    mapsend_track_write();
-  } else {
-    gbfwrite(&hdr, sizeof(hdr), 1, mapsend_file_out);
-
-    if (global_opts.objective == wptdata) {
-      gbfputint32(wpt_count, mapsend_file_out);
-      waypt_disp_all(mapsend_waypt_pr);
-    } else if (global_opts.objective == rtedata) {
-
-      /* # of points - all routes */
-      gbfputint32(route_waypt_count(), mapsend_file_out);
-
-      /* write points - all routes */
-      route_disp_all(nullptr, nullptr, mapsend_waypt_pr);
-    }
-
-    int n = route_count();
-
-    gbfputint32(n, mapsend_file_out);
-
-    if (n) {
-      route_disp_all(mapsend_route_hdr, nullptr, mapsend_route_disp);
-    }
-  }
-}
-
-
-
-ff_vecs_t mapsend_vecs = {
-  ff_type_file,
-  FF_CAP_RW_ALL,
-  mapsend_rd_init,
-  mapsend_wr_init,
-  mapsend_rd_deinit,
-  mapsend_wr_deinit,
-  mapsend_read,
-  mapsend_wpt_write,
-  nullptr,
-  &mapsend_args,
-  CET_CHARSET_ASCII, 0 /* CET-REVIEW */
-  , NULL_POS_OPS,
-  nullptr
-};
diff --git a/mapsend.h b/mapsend.h
deleted file mode 100644 (file)
index 6cd8ff2..0000000
--- a/mapsend.h
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
-    Access to MapSend files.
-
-    Copyright (C) 2002 Robert Lipe, robertlipe@usa.net
-
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with this program; if not, write to the Free Software
-    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
-
- *
- * Information from:
- *  Mapsend File Format Description Revision 1.1, March 6, 2002 from Thales.
- *
- * Note this file format was clearly NOT designed for cross-architecture
- * portability.  In fact, because of the pascal nature of the 'string'
- * data type described in that document, it's impractical to describe
- * a 'struct waypoint' in C.
- *
- */
-
-struct mapsend_hdr {
-  char ms_length;
-  char ms_signature[11];
-  char ms_version[2];
-  char ms_type;
-  char _ms_type[3];
-};
-
-enum ms_type {
-  ms_type_rgn = 0,
-  ms_type_wpt = 1,
-  ms_type_track = 2,
-  ms_type_log = 3
-};
index dcea2be5209f71e8165d1eeb65d9e0ce22df9fd9..2b717c65d7cea5f28226e0e53e204fd2db5891e9 100644 (file)
@@ -64,7 +64,6 @@
       <BrowseInformation>false</BrowseInformation>\r
       <DebugInformationFormat>None</DebugInformationFormat>\r
       <DisableSpecificWarnings>4100;4577;4467;%(DisableSpecificWarnings)</DisableSpecificWarnings>\r
-      <ExceptionHandling>Sync</ExceptionHandling>\r
       <MultiProcessorCompilation>true</MultiProcessorCompilation>\r
       <ObjectFileName>release\</ObjectFileName>\r
       <Optimization>MaxSpeed</Optimization>\r
@@ -85,7 +84,6 @@
       <IgnoreImportLibrary>true</IgnoreImportLibrary>\r
       <LinkIncremental>false</LinkIncremental>\r
       <OutputFile>$(OutDir)\GPSBabel.exe</OutputFile>\r
-      <RandomizedBaseAddress>true</RandomizedBaseAddress>\r
       <SubSystem>Console</SubSystem>\r
       <SuppressStartupBanner>true</SuppressStartupBanner>\r
     </Link>\r
       <BrowseInformation>false</BrowseInformation>\r
       <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
       <DisableSpecificWarnings>4100;4577;4467;%(DisableSpecificWarnings)</DisableSpecificWarnings>\r
-      <ExceptionHandling>Sync</ExceptionHandling>\r
       <MultiProcessorCompilation>true</MultiProcessorCompilation>\r
       <ObjectFileName>debug\</ObjectFileName>\r
       <Optimization>Disabled</Optimization>\r
       <GenerateDebugInformation>true</GenerateDebugInformation>\r
       <IgnoreImportLibrary>true</IgnoreImportLibrary>\r
       <OutputFile>$(OutDir)\GPSBabel.exe</OutputFile>\r
-      <RandomizedBaseAddress>true</RandomizedBaseAddress>\r
       <SubSystem>Console</SubSystem>\r
       <SuppressStartupBanner>true</SuppressStartupBanner>\r
     </Link>\r
     <ClCompile Include="bushnell_trl.cc" />\r
     <ClCompile Include="cet.cc" />\r
     <ClCompile Include="cet_util.cc" />\r
-    <ClCompile Include="compegps.cc" />\r
     <ClCompile Include="zlib\compress.c" />\r
     <ClCompile Include="zlib\crc32.c" />\r
-    <ClCompile Include="cst.cc" />\r
     <ClCompile Include="csv_util.cc" />\r
     <ClCompile Include="shapelib\dbfopen.c" />\r
     <ClCompile Include="zlib\deflate.c" />\r
     <ClCompile Include="fatal.cc" />\r
     <ClCompile Include="filter_vecs.cc" />\r
     <ClCompile Include="formspec.cc" />\r
-    <ClCompile Include="g7towin.cc" />\r
     <ClCompile Include="garmin.cc" />\r
     <ClCompile Include="garmin_device_xml.cc" />\r
     <ClCompile Include="garmin_fit.cc" />\r
     <ClCompile Include="glogbook.cc" />\r
     <ClCompile Include="gnav_trl.cc" />\r
     <ClCompile Include="googledir.cc" />\r
-    <ClCompile Include="gopal.cc" />\r
     <ClCompile Include="jeeps\gpsapp.cc" />\r
     <ClCompile Include="jeeps\gpscom.cc" />\r
     <ClCompile Include="jeeps\gpsdevice.cc" />\r
     <ClCompile Include="jeeps\gpsusbread.cc" />\r
     <ClCompile Include="jeeps\gpsusbsend.cc" />\r
     <ClCompile Include="jeeps\gpsusbwin.cc" />\r
-    <ClCompile Include="gpsutil.cc" />\r
     <ClCompile Include="gpx.cc" />\r
     <ClCompile Include="grtcirc.cc" />\r
     <ClCompile Include="gtm.cc" />\r
     <ClCompile Include="html.cc" />\r
     <ClCompile Include="humminbird.cc" />\r
     <ClCompile Include="igc.cc" />\r
-    <ClCompile Include="ignrando.cc" />\r
     <ClCompile Include="igo8.cc" />\r
     <ClCompile Include="ik3d.cc" />\r
     <ClCompile Include="zlib\infback.c" />\r
     <ClCompile Include="internal_styles.cc" />\r
     <ClCompile Include="interpolate.cc" />\r
     <ClCompile Include="itracku.cc" />\r
-    <ClCompile Include="jeeps\jgpsutil.cc" />\r
-    <ClCompile Include="jogmap.cc" />\r
-    <ClCompile Include="jtr.cc" />\r
     <ClCompile Include="kml.cc" />\r
     <ClCompile Include="lmx.cc" />\r
     <ClCompile Include="lowranceusr.cc" />\r
-    <ClCompile Include="maggeo.cc" />\r
     <ClCompile Include="magproto.cc" />\r
     <ClCompile Include="main.cc" />\r
     <ClCompile Include="mapasia.cc" />\r
     <ClCompile Include="mapbar_track.cc" />\r
     <ClCompile Include="mapfactor.cc" />\r
-    <ClCompile Include="mapsend.cc" />\r
     <ClCompile Include="mapsource.cc" />\r
     <ClCompile Include="mkshort.cc" />\r
     <ClCompile Include="mmo.cc" />\r
     <ClCompile Include="osm.cc" />\r
     <ClCompile Include="ozi.cc" />\r
     <ClCompile Include="parse.cc" />\r
-    <ClCompile Include="pcx.cc" />\r
-    <ClCompile Include="pocketfms_bc.cc" />\r
-    <ClCompile Include="pocketfms_fp.cc" />\r
-    <ClCompile Include="pocketfms_wp.cc" />\r
     <ClCompile Include="polygon.cc" />\r
     <ClCompile Include="position.cc" />\r
     <ClCompile Include="radius.cc" />\r
-    <ClCompile Include="random.cc" />\r
     <ClCompile Include="raymarine.cc" />\r
     <ClCompile Include="reverse_route.cc" />\r
     <ClCompile Include="rgbcolors.cc" />\r
     <ClCompile Include="session.cc" />\r
     <ClCompile Include="shape.cc" />\r
     <ClCompile Include="shapelib\shpopen.c" />\r
-    <ClCompile Include="skyforce.cc" />\r
     <ClCompile Include="skytraq.cc" />\r
     <ClCompile Include="smplrout.cc" />\r
     <ClCompile Include="sort.cc" />\r
     <ClCompile Include="stackfilter.cc" />\r
-    <ClCompile Include="stmsdf.cc" />\r
-    <ClCompile Include="stmwpp.cc" />\r
     <ClCompile Include="strptime.c" />\r
     <ClCompile Include="subrip.cc" />\r
     <ClCompile Include="swapdata.cc" />\r
     <ClCompile Include="tef_xml.cc" />\r
     <ClCompile Include="teletype.cc" />\r
     <ClCompile Include="text.cc" />\r
-    <ClCompile Include="tiger.cc" />\r
     <ClCompile Include="tmpro.cc" />\r
     <ClCompile Include="tomtom.cc" />\r
     <ClCompile Include="tpg.cc" />\r
     <ClCompile Include="validate.cc" />\r
     <ClCompile Include="vcf.cc" />\r
     <ClCompile Include="vecs.cc" />\r
-    <ClCompile Include="vidaone.cc" />\r
-    <ClCompile Include="vitosmt.cc" />\r
-    <ClCompile Include="vitovtt.cc" />\r
-    <ClCompile Include="vpl.cc" />\r
     <ClCompile Include="waypt.cc" />\r
     <ClCompile Include="wbt-200.cc" />\r
-    <ClCompile Include="wfff_xml.cc" />\r
     <ClCompile Include="wintec_tes.cc" />\r
     <ClCompile Include="xcsv.cc" />\r
     <ClCompile Include="xmlgeneric.cc" />\r
     <ClCompile Include="src\core\xmlstreamwriter.cc" />\r
     <ClCompile Include="xmltag.cc" />\r
     <ClCompile Include="xol.cc" />\r
-    <ClCompile Include="yahoo.cc" />\r
     <ClCompile Include="zlib\zutil.c" />\r
   </ItemGroup>\r
   <ItemGroup>\r
     <ClInclude Include="jeeps\gpsserial.h" />\r
     <ClInclude Include="jeeps\gpsusbcommon.h" />\r
     <ClInclude Include="jeeps\gpsusbint.h" />\r
-    <ClInclude Include="jeeps\gpsutil.h" />\r
     <ClInclude Include="grtcirc.h" />\r
     <ClInclude Include="zlib\gzguts.h" />\r
     <ClInclude Include="height.h" />\r
     <ClInclude Include="cet\iso_8859_8.h" />\r
     <ClInclude Include="src\core\logging.h" />\r
     <ClInclude Include="magellan.h" />\r
-    <ClInclude Include="mapsend.h" />\r
     <ClInclude Include="navilink.h" />\r
     <ClInclude Include="nukedata.h" />\r
     <ClInclude Include="polygon.h" />\r
       <FileType>Document</FileType>\r
       <ExcludedFromBuild Condition="&apos;$(Configuration)|$(Platform)&apos;==&apos;Release|Win32&apos;">true</ExcludedFromBuild>\r
       <AdditionalInputs Condition="&apos;$(Configuration)|$(Platform)&apos;==&apos;Debug|Win32&apos;">C:\Qt\5.12.2\msvc2017\mkspecs\features\data\dummy.cpp;%(AdditionalInputs)</AdditionalInputs>\r
-      <Command Condition="&apos;$(Configuration)|$(Platform)&apos;==&apos;Debug|Win32&apos;">cl -BxC:\Qt\5.12.2\msvc2017\bin\qmake.exe -nologo -Zc:wchar_t -FS -Zc:rvalueCast -Zc:inline -Zc:strictStrings -Zc:throwingNew -Zc:referenceBinding -Zc:__cplusplus /MP -wd4100 -Zi -MDd -std:c++14 -W3 -w34100 -w34189 -w44996 -w44456 -w44457 -w44458 -wd4577 -wd4467 -E C:\Qt\5.12.2\msvc2017\mkspecs\features\data\dummy.cpp 2>NUL >debug\moc_predefs.h</Command>\r
       <Message Condition="&apos;$(Configuration)|$(Platform)&apos;==&apos;Debug|Win32&apos;">Generate moc_predefs.h</Message>\r
       <Outputs Condition="&apos;$(Configuration)|$(Platform)&apos;==&apos;Debug|Win32&apos;">debug\moc_predefs.h;%(Outputs)</Outputs>\r
     </CustomBuild>\r
     <CustomBuild Include="release\moc_predefs.h.cbt">\r
       <FileType>Document</FileType>\r
       <AdditionalInputs Condition="&apos;$(Configuration)|$(Platform)&apos;==&apos;Release|Win32&apos;">C:\Qt\5.12.2\msvc2017\mkspecs\features\data\dummy.cpp;%(AdditionalInputs)</AdditionalInputs>\r
-      <Command Condition="&apos;$(Configuration)|$(Platform)&apos;==&apos;Release|Win32&apos;">cl -BxC:\Qt\5.12.2\msvc2017\bin\qmake.exe -nologo -Zc:wchar_t -FS -Zc:rvalueCast -Zc:inline -Zc:strictStrings -Zc:throwingNew -Zc:referenceBinding -Zc:__cplusplus /MP -wd4100 -O2 -MD -std:c++14 -W3 -w34100 -w34189 -w44996 -w44456 -w44457 -w44458 -wd4577 -wd4467 -E C:\Qt\5.12.2\msvc2017\mkspecs\features\data\dummy.cpp 2>NUL >release\moc_predefs.h</Command>\r
       <Message Condition="&apos;$(Configuration)|$(Platform)&apos;==&apos;Release|Win32&apos;">Generate moc_predefs.h</Message>\r
       <Outputs Condition="&apos;$(Configuration)|$(Platform)&apos;==&apos;Release|Win32&apos;">release\moc_predefs.h;%(Outputs)</Outputs>\r
       <ExcludedFromBuild Condition="&apos;$(Configuration)|$(Platform)&apos;==&apos;Debug|Win32&apos;">true</ExcludedFromBuild>\r
index c999627dff00c22971953aff3f88177c0e1a57ac..98d5b69f6b313edcbb3138953d1d40089e0b764b 100755 (executable)
@@ -60,7 +60,6 @@
     <ClCompile Include="cet_util.cc">\r
       <Filter>Source Files</Filter>\r
     </ClCompile>\r
-    <ClCompile Include="compegps.cc">\r
       <Filter>Source Files</Filter>\r
     </ClCompile>\r
     <ClCompile Include="zlib\compress.c">\r
@@ -69,7 +68,6 @@
     <ClCompile Include="zlib\crc32.c">\r
       <Filter>Source Files</Filter>\r
     </ClCompile>\r
-    <ClCompile Include="cst.cc">\r
       <Filter>Source Files</Filter>\r
     </ClCompile>\r
     <ClCompile Include="csv_util.cc">\r
     <ClCompile Include="formspec.cc">\r
       <Filter>Source Files</Filter>\r
     </ClCompile>\r
-    <ClCompile Include="g7towin.cc">\r
       <Filter>Source Files</Filter>\r
     </ClCompile>\r
     <ClCompile Include="garmin.cc">\r
     <ClCompile Include="googledir.cc">\r
       <Filter>Source Files</Filter>\r
     </ClCompile>\r
-    <ClCompile Include="gopal.cc">\r
       <Filter>Source Files</Filter>\r
     </ClCompile>\r
     <ClCompile Include="jeeps\gpsapp.cc">\r
     <ClCompile Include="jeeps\gpsusbwin.cc">\r
       <Filter>Source Files</Filter>\r
     </ClCompile>\r
-    <ClCompile Include="gpsutil.cc">\r
       <Filter>Source Files</Filter>\r
     </ClCompile>\r
     <ClCompile Include="gpx.cc">\r
     <ClCompile Include="igc.cc">\r
       <Filter>Source Files</Filter>\r
     </ClCompile>\r
-    <ClCompile Include="ignrando.cc">\r
       <Filter>Source Files</Filter>\r
     </ClCompile>\r
     <ClCompile Include="igo8.cc">\r
     <ClCompile Include="itracku.cc">\r
       <Filter>Source Files</Filter>\r
     </ClCompile>\r
-    <ClCompile Include="jeeps\jgpsutil.cc">\r
       <Filter>Source Files</Filter>\r
     </ClCompile>\r
-    <ClCompile Include="jogmap.cc">\r
       <Filter>Source Files</Filter>\r
     </ClCompile>\r
-    <ClCompile Include="jtr.cc">\r
       <Filter>Source Files</Filter>\r
     </ClCompile>\r
     <ClCompile Include="kml.cc">\r
     <ClCompile Include="lowranceusr.cc">\r
       <Filter>Source Files</Filter>\r
     </ClCompile>\r
-    <ClCompile Include="maggeo.cc">\r
       <Filter>Source Files</Filter>\r
     </ClCompile>\r
     <ClCompile Include="magproto.cc">\r
     <ClCompile Include="mapfactor.cc">\r
       <Filter>Source Files</Filter>\r
     </ClCompile>\r
-    <ClCompile Include="mapsend.cc">\r
       <Filter>Source Files</Filter>\r
     </ClCompile>\r
     <ClCompile Include="mapsource.cc">\r
     <ClCompile Include="parse.cc">\r
       <Filter>Source Files</Filter>\r
     </ClCompile>\r
-    <ClCompile Include="pcx.cc">\r
       <Filter>Source Files</Filter>\r
     </ClCompile>\r
-    <ClCompile Include="pocketfms_bc.cc">\r
       <Filter>Source Files</Filter>\r
     </ClCompile>\r
-    <ClCompile Include="pocketfms_fp.cc">\r
       <Filter>Source Files</Filter>\r
     </ClCompile>\r
-    <ClCompile Include="pocketfms_wp.cc">\r
       <Filter>Source Files</Filter>\r
     </ClCompile>\r
     <ClCompile Include="polygon.cc">\r
     <ClCompile Include="radius.cc">\r
       <Filter>Source Files</Filter>\r
     </ClCompile>\r
-    <ClCompile Include="random.cc">\r
       <Filter>Source Files</Filter>\r
     </ClCompile>\r
     <ClCompile Include="raymarine.cc">\r
     <ClCompile Include="shapelib\shpopen.c">\r
       <Filter>Source Files</Filter>\r
     </ClCompile>\r
-    <ClCompile Include="skyforce.cc">\r
       <Filter>Source Files</Filter>\r
     </ClCompile>\r
     <ClCompile Include="skytraq.cc">\r
     <ClCompile Include="stackfilter.cc">\r
       <Filter>Source Files</Filter>\r
     </ClCompile>\r
-    <ClCompile Include="stmsdf.cc">\r
       <Filter>Source Files</Filter>\r
     </ClCompile>\r
-    <ClCompile Include="stmwpp.cc">\r
       <Filter>Source Files</Filter>\r
     </ClCompile>\r
     <ClCompile Include="strptime.c">\r
     <ClCompile Include="text.cc">\r
       <Filter>Source Files</Filter>\r
     </ClCompile>\r
-    <ClCompile Include="tiger.cc">\r
       <Filter>Source Files</Filter>\r
     </ClCompile>\r
     <ClCompile Include="tmpro.cc">\r
     <ClCompile Include="vecs.cc">\r
       <Filter>Source Files</Filter>\r
     </ClCompile>\r
-    <ClCompile Include="vidaone.cc">\r
       <Filter>Source Files</Filter>\r
     </ClCompile>\r
-    <ClCompile Include="vitosmt.cc">\r
       <Filter>Source Files</Filter>\r
     </ClCompile>\r
-    <ClCompile Include="vitovtt.cc">\r
       <Filter>Source Files</Filter>\r
     </ClCompile>\r
-    <ClCompile Include="vpl.cc">\r
       <Filter>Source Files</Filter>\r
     </ClCompile>\r
     <ClCompile Include="waypt.cc">\r
     <ClCompile Include="wbt-200.cc">\r
       <Filter>Source Files</Filter>\r
     </ClCompile>\r
-    <ClCompile Include="wfff_xml.cc">\r
       <Filter>Source Files</Filter>\r
     </ClCompile>\r
     <ClCompile Include="wintec_tes.cc">\r
     <ClCompile Include="xol.cc">\r
       <Filter>Source Files</Filter>\r
     </ClCompile>\r
-    <ClCompile Include="yahoo.cc">\r
       <Filter>Source Files</Filter>\r
     </ClCompile>\r
     <ClCompile Include="zlib\zutil.c">\r
     <ClInclude Include="jeeps\gpsusbint.h">\r
       <Filter>Header Files</Filter>\r
     </ClInclude>\r
-    <ClInclude Include="jeeps\gpsutil.h">\r
       <Filter>Header Files</Filter>\r
     </ClInclude>\r
     <ClInclude Include="grtcirc.h">\r
     <ClInclude Include="magellan.h">\r
       <Filter>Header Files</Filter>\r
     </ClInclude>\r
-    <ClInclude Include="mapsend.h">\r
       <Filter>Header Files</Filter>\r
     </ClInclude>\r
     <ClInclude Include="navilink.h">\r
diff --git a/nmn4.cc b/nmn4.cc
deleted file mode 100644 (file)
index f083e17..0000000
--- a/nmn4.cc
+++ /dev/null
@@ -1,286 +0,0 @@
-/*
-
-   Support for Navigon Mobile Navigator .rte files.
-
-   Copyright (C) 2005 Olaf Klein, o.b.klein@gpsbabel.org
-
-   This program is free software; you can redistribute it and/or modify
-   it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 2 of the License, or
-   (at your option) any later version.
-
-   This program is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-   GNU General Public License for more details.
-
-   You should have received a copy of the GNU General Public License
-   along with this program; if not, write to the Free Software
-   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
-*/
-
-/*
-    line structure, items delimited by '|'
-
--|-|17|-|ZIP-Code|City|ZIP-Code2|Street|No.|-|-|longitude|latitude|-|-| + 0D0A
-
-*/
-
-#include "defs.h"
-#include "cet_util.h"
-#include "csv_util.h"
-#include <cctype>
-#include <cstdarg>
-#include <cstdio>
-#include <cstdlib>
-
-static gbfile* fin, *fout;
-static int curr_rte_num, target_rte_num;
-
-#define MYNAME "navigon"
-
-static char* index_opt;
-
-static
-QVector<arglist_t> nmn4_args = {
-  {"index", &index_opt, "Index of route to write (if more than one in source)", nullptr, ARGTYPE_INT, "1", nullptr , nullptr},
-};
-
-
-static void
-nmn4_check_line(char* line)
-{
-  char* c = line;
-  int i = 0;
-  while ((c = strchr(c, '|'))) {
-    c++;
-    i++;
-  }
-  is_fatal((i != 15),
-           MYNAME ": Invalid or unknown structure!");
-}
-
-static void
-nmn4_read_data()
-{
-  char* buff;
-  int line = 0;
-
-  QString zip2, city, street, number;
-
-  auto* route = new route_head;
-  route_add_head(route);
-
-  while ((buff = gbfgetstr(fin))) {
-    if ((line++ == 0) && fin->unicode) {
-      cet_convert_init(CET_CHARSET_UTF8, 1);
-    }
-    char* str = buff = lrtrim(buff);
-    if (*buff == '\0') {
-      continue;
-    }
-
-    nmn4_check_line(buff);
-
-    /* for a quiet compiler */
-    QString zip1 = zip2 = city = street = number = QString();
-
-    auto* wpt = new Waypoint;
-
-    int column = -1;
-    QString c = csv_lineparse(str, "|", "", column++);
-    while (!c.isNull()) {
-      switch (column) {
-      case  0: /* "-" */       /* unknown fields for the moment */
-      case  1: /* "-" */
-      case  2: /* "-" */
-      case  3: /* "-" */
-      case  9: /* "-" */
-      case 10: /* "-" */
-      case 13: /* "-" */
-      case 14: /* "-" */
-      case 15: /* "" */
-        break;
-
-      case  4:                                 /* ZIP Code */
-        if (c[0] != '-') {
-          zip1 = c;
-        }
-        break;
-
-      case  5:                                 /* City */
-        if (c[0] != '-') {
-          city = c;
-        }
-        break;
-
-      case  6:                                 /* ZIP Code -2- */
-        if (c[0] != '-') {
-          zip2 = c;
-        }
-        break;
-
-      case  7:                                 /* Street */
-        if (c[0] != '-') {
-          street = c;
-        }
-        break;
-
-      case  8:                                 /* Number */
-        if (c[0] != '-') {
-          number = c;
-        }
-
-        /*
-                  This is our final index
-           All stuff for generating names or comments
-           is hold locally.
-
-           We don't have fields for street, city or zip-code.
-           Instead we construct a description from that.
-        */
-
-        if (zip1 == zip2) {
-          zip2 = QString();
-        }
-        if (!city.isEmpty()) {
-          /*
-          if any field following city has a value, add a comma to city
-          */
-          if (!street.isEmpty() || !number.isEmpty() || !zip2.isEmpty()) {
-            city += ",";
-          }
-        }
-
-        /* concatenates all fields to one string and release */
-        wpt->description = zip1.trimmed() + " " +
-          city.trimmed() + " " +
-          street.trimmed() + " " +
-          number.trimmed() + " " +
-          zip2.trimmed();
-
-        break;
-
-      case 11:                                 /* longitude */
-        wpt->longitude = c.toDouble();
-        break;
-
-      case 12:                                 /* latitude */
-        wpt->latitude = c.toDouble();
-        break;
-
-      }
-      c = QString::fromLatin1(csv_lineparse(nullptr, "|", "", column++));
-    }
-    route_add_wpt(route, wpt);
-  }
-}
-
-static void
-nmn4_route_hdr(const route_head*)
-{
-  curr_rte_num++;
-}
-
-static void
-nmn4_write_waypt(const Waypoint* wpt)
-{
-  char city[128], street[128], zipc[32], number[32];
-
-  if (curr_rte_num != target_rte_num) {
-    return;
-  }
-
-  strncpy(city, "-", sizeof(city));
-  strncpy(street, "-", sizeof(street));
-  strncpy(zipc, "-", sizeof(zipc));
-  strncpy(number, "-", sizeof(number));
-
-  /*
-     Population of specific data used by Navigon may come in the
-     future or it may be impossible. We currently output only the
-     coordinates in the output, but this is sufficient for Navigon.
-
-     The coordinates are the only item we are about guaranteed to have
-     when converting to any from any format, so we leave the other
-     fields unpopulated.  So i have to pay Navigon a compliment for
-     implementing a simple data exchange.
-   */
-
-  gbfprintf(fout, "-|-|-|-|%s|%s|%s|%s|%s|-|-|%.5f|%.5f|-|-|\r\n",
-            zipc, city, zipc, street, number,
-            wpt->longitude, wpt->latitude);
-}
-
-static void
-nmn4_write_data()
-{
-
-  target_rte_num = 1;
-
-  if (index_opt != nullptr) {
-    target_rte_num = atoi(index_opt);
-    is_fatal(((target_rte_num > (int) route_count()) || (target_rte_num < 1)),
-             MYNAME ": invalid route number %d (1..%d))!\n", target_rte_num, route_count());
-  }
-
-  curr_rte_num = 0;
-  route_disp_all(nmn4_route_hdr, nullptr, nmn4_write_waypt);
-}
-
-
-/* %%% global callbacks %%% */
-
-static void
-nmn4_rd_init(const QString& fname)
-{
-  fin = gbfopen(fname, "rb", MYNAME);
-}
-
-static void
-nmn4_rd_deinit()
-{
-  gbfclose(fin);
-}
-
-static void
-nmn4_read()
-{
-  nmn4_read_data();
-}
-
-static void
-nmn4_wr_init(const QString& fname)
-{
-  fout = gbfopen(fname, "wb", MYNAME);
-}
-
-static void
-nmn4_wr_deinit()
-{
-  gbfclose(fout);
-}
-
-static void
-nmn4_write()
-{
-  nmn4_write_data();
-}
-
-/* --------------------------------------------------------------------------- */
-
-ff_vecs_t nmn4_vecs = {
-  ff_type_file,
-  { ff_cap_none, ff_cap_none, (ff_cap)(ff_cap_read | ff_cap_write)},
-  nmn4_rd_init,
-  nmn4_wr_init,
-  nmn4_rd_deinit,
-  nmn4_wr_deinit,
-  nmn4_read,
-  nmn4_write,
-  nullptr,
-  &nmn4_args,
-  CET_CHARSET_MS_ANSI, 1       /* CET-REVIEW */
-  , NULL_POS_OPS,
-  nullptr
-};
diff --git a/pcx.cc b/pcx.cc
deleted file mode 100644 (file)
index 7a50015..0000000
--- a/pcx.cc
+++ /dev/null
@@ -1,423 +0,0 @@
-/*
-    Access to Garmin PCX5 files.
-    Format described in: http://www.garmin.com/manuals/PCX5_OwnersManual.pdf
-
-    Copyright (C) 2002-2017 Robert Lipe, robertlipe+source@gpsbabel.org
-
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with this program; if not, write to the Free Software
-    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
-*/
-
-#include <cmath>                      // for fabs
-#include <cstdlib>                    // for atoi
-#include <cstring>                    // for strstr, strncmp
-
-#include <QChar>                      // for operator==, QChar
-#include <QDate>                      // for QDate
-#include <QDateTime>                  // for QDateTime
-#include <QList>                      // for QList
-#include <QRegularExpression>         // for QRegularExpression
-#include <QString>                    // for QString, QString::SectionSkipEmpty
-#include <QStringList>                // for QStringList
-#include <QTime>                      // for QTime
-#include <QVector>                    // for QVector
-#include <Qt>                         // for CaseInsensitive, UTC
-
-#include "defs.h"
-#include "cet_util.h"                 // for cet_convert_init
-#include "csv_util.h"                 // for human_to_dec
-#include "garmin_tables.h"            // for gt_find_icon_number_from_desc, PCX, gt_find_desc_from_icon_number
-#include "gbfile.h"                   // for gbfprintf, gbfclose, gbfopen, gbfgetstr, gbfile
-#include "src/core/datetime.h"        // for DateTime
-
-
-static gbfile* file_in, *file_out;
-static short_handle mkshort_handle;
-static short_handle mkshort_handle2; /* for track and route names */
-static char* deficon = nullptr;
-static char* cartoexploreur;
-static int read_as_degrees;
-static int read_gpsu;
-static int route_ctr;
-static int comment_col = 60; /* This has a default */
-static int sym_col;
-static int lat_col;
-static int lon_col;
-
-#define MYNAME "PCX"
-
-static QVector<arglist_t> pcx_args = {{"deficon", &deficon, "Default icon name",
-                                "Waypoint", ARGTYPE_STRING, ARG_NOMINMAX, nullptr},
-                               {"cartoexploreur", &cartoexploreur,
-                                "Write tracks compatible with Carto Exploreur",
-                                nullptr, ARGTYPE_BOOL, ARG_NOMINMAX, nullptr},
-                               };
-
-static void rd_init(const QString& fname) {
-  file_in = gbfopen(fname, "rb", MYNAME);
-}
-
-static void rd_deinit() { gbfclose(file_in); }
-
-static void wr_init(const QString& fname) {
-  file_out = gbfopen(fname, "w", MYNAME);
-  mkshort_handle = mkshort_new_handle();
-  mkshort_handle2 = mkshort_new_handle();
-}
-
-static void wr_deinit() {
-  gbfclose(file_out);
-  mkshort_del_handle(&mkshort_handle);
-  mkshort_del_handle(&mkshort_handle2);
-}
-
-// Find the first token in string |in| when there may be leading whitespace.
-// These files have weird mixtures of spaces and tabs.
-static QString FirstTokenAt(const QString& in, int index) {
-  static const QRegularExpression sep(QRegularExpression(R"(\s+)"));
-  return in.mid(index, -1).section(sep, 0, 0, QString::SectionSkipEmpty);
-}
-
-// Centralize Date/Time parsing between Waypoint and Trackpoint readers.
-static void  SetWaypointTime(Waypoint* wpt, const QString& date, const QString& time) {
-  QDate qdate = QDate::fromString(date, "dd-MMM-yy");
-  QTime qtime = QTime::fromString(time, "hh:mm:ss");
-  if (qdate.isValid() && qtime.isValid()) {
-    wpt->SetCreationTime(QDateTime(qdate, qtime, Qt::UTC));
-  }
-}
-
-// Loop and parse all the lines of the file. This is complicated by the
-// variety of programs in the wild that loosely use this format and that
-// there are two distinct versions of PCX.
-// In the simplest form, white spaces are disallowed in the individual
-// fields and everything is just whitespace separated and the fields have
-// a fixed order.
-// The presence of an "F" or "H" record changes the precedence of parse
-// to allow fields in any order and length, based on their position in
-// these header lines. Oddly, we've seen only 'W' records take this form.
-
-static void data_read() {
-  int symnum;
-  Waypoint* wpt_tmp;
-  char* buff;
-  route_head* track = nullptr;
-  route_head* route = nullptr;
-  int line_number = 0;
-
-  read_as_degrees = 0;
-  int points = 0;
-  const QRegularExpression sep(QRegularExpression(R"(\s+)"));
-
-  // Each line is both |buff| as a C string and |line| as a QString.
-  while ((buff = gbfgetstr(file_in))) {
-    const QString line = QString(buff).trimmed();
-    char* ibuf = lrtrim(buff);
-    if ((line_number++ == 0) && file_in->unicode) {
-      cet_convert_init(CET_CHARSET_UTF8, 1);
-    }
-
-    switch (ibuf[0]) {
-      case 'W': {
-        const QStringList tokens = line.split(sep);
-        if (tokens.size() < 6) {
-          fatal(MYNAME
-                ": Unable to parse waypoint, not all required columns "
-                "contained\n");
-        }
-        // tokens[0] = "W".
-        QString name = tokens[1];
-        QString tbuf = tokens[2];
-        QString nbuf = tokens[3];
-        QString date = tokens[4];
-        QString time = tokens[5];
-        long alt = unknown_alt;
-        if (tokens.size() == 7) {
-          alt = tokens[6].toDouble();
-        }
-
-        QString desc;
-        if (comment_col > 0) {
-          desc = line.mid(comment_col, -1);
-        }
-
-        symnum = 18;
-        if (sym_col > 0) {
-          symnum = atoi(&ibuf[sym_col]);
-        }
-
-        // If we have explicit columns for lat and lon,
-        // copy those entire words (warning: no spaces)
-        // into the respective coord buffers.
-        if (lat_col > 0) {
-          tbuf = FirstTokenAt(line, lat_col);
-        }
-        if (lon_col > 0) {
-          nbuf = FirstTokenAt(line, lon_col);
-        }
-
-        wpt_tmp = new Waypoint;
-        wpt_tmp->altitude = alt;
-        SetWaypointTime(wpt_tmp, date, time);
-        wpt_tmp->shortname = name.trimmed();
-        wpt_tmp->description = desc.trimmed();
-        wpt_tmp->icon_descr = gt_find_desc_from_icon_number(symnum, PCX);
-
-        double lat = 0;
-        double lon = 0;
-        if (read_as_degrees || read_gpsu) {
-          human_to_dec(tbuf, &lat, &lon, 1);
-          human_to_dec(nbuf, &lat, &lon, 2);
-          wpt_tmp->longitude = lon;
-          wpt_tmp->latitude = lat;
-        } else {
-          lat = tbuf.mid(1, -1).toDouble();
-          lon = nbuf.mid(1, -1).toDouble();
-          if (tbuf[0] == 'S') {
-            lat = -lat;
-          }
-          if (nbuf[0] == 'W') {
-            lon = -lon;
-          }
-          wpt_tmp->longitude = ddmm2degrees(lon);
-          wpt_tmp->latitude = ddmm2degrees(lat);
-        }
-
-        if (route != nullptr) {
-          route_add_wpt(route, new Waypoint(*wpt_tmp));
-        }
-        waypt_add(wpt_tmp);
-        points++;
-        break;
-      }
-      case 'H':
-        /* Garmap2 has headers
-        "H(2 spaces)LATITUDE(some spaces)LONGITUDE(etc... followed by);track
-          everything else is
-          H(2 chars)TN(trackname\0)
-          */
-        if (points > 0) {
-          track = nullptr;
-          points = 0;
-        }
-        if (track == nullptr) {
-          if (ibuf[3] == 'L' && ibuf[4] == 'A') {
-            track = new route_head;
-            track->rte_name = "track";
-            track_add_head(track);
-          } else if (ibuf[3] == 'T' && ibuf[4] == 'N') {
-            track = new route_head;
-            track->rte_name = &ibuf[6];
-            track_add_head(track);
-          }
-        }
-        break;
-      case 'R':
-        route = new route_head;
-        route->rte_name = QString(&ibuf[1]).trimmed();
-        route_add_head(route);
-        break;
-      case 'T': {
-        const QStringList tokens = line.split(sep);
-        if (tokens.size() < 6) {
-          fatal(MYNAME
-                ": Unable to parse trackpoint, not all required columns "
-                "contained\n");
-        }
-
-        // tokens[0] = "W".
-        QString tbuf = tokens[1];
-        QString nbuf = tokens[2];
-        QString date = tokens[3];
-        QString time = tokens[4];
-        double alt = tokens[5].toDouble();
-
-        wpt_tmp = new Waypoint;
-        SetWaypointTime(wpt_tmp, date, time);
-
-        double lat, lon;
-        if (read_as_degrees) {
-          human_to_dec(tbuf, &lat, &lon, 1);
-          human_to_dec(nbuf, &lat, &lon, 2);
-
-          wpt_tmp->longitude = lon;
-          wpt_tmp->latitude = lat;
-        } else {
-          lat = tbuf.mid(1, -1).toDouble();
-          lon = nbuf.mid(1, -1).toDouble();
-          if (tbuf[0] == 'S') {
-            lat = -lat;
-          }
-          if (nbuf[0] == 'W') {
-            lon = -lon;
-          }
-          wpt_tmp->longitude = ddmm2degrees(lon);
-          wpt_tmp->latitude = ddmm2degrees(lat);
-        }
-        wpt_tmp->altitude = alt;
-
-        /* Did we get a track point before a track header? */
-        if (track == nullptr) {
-          track = new route_head;
-          track->rte_name = "Default";
-          track_add_head(track);
-        }
-        track_add_wpt(track, wpt_tmp);
-        points++;
-        break;
-      }
-      case 'U':
-        read_as_degrees = !strncmp("LAT LON DEG", ibuf + 3, 11);
-        if (strstr(ibuf, "UTM")) {
-          fatal(MYNAME ": UTM is not supported.\n");
-        }
-        break;
-      // GPSU is apparently PCX but with a different definition
-      // of "LAT LON DM" - unlike the other, it actually IS decimal
-      // minutes.
-      case 'I':
-        read_gpsu = !(strstr(ibuf, "GPSU") == nullptr);
-        break;
-      // This is a format specifier.  Use this line to figure out
-      // where our other columns start.
-      case 'F': {
-        comment_col = line.indexOf("comment", 0, Qt::CaseInsensitive);
-        sym_col = line.indexOf("symbol", 0, Qt::CaseInsensitive);
-        lat_col = line.indexOf("latitude", 0, Qt::CaseInsensitive);
-        lon_col = line.indexOf("longitude", 0, Qt::CaseInsensitive);
-      } break;
-      default:
-        break;
-    }
-  }
-}
-
-static void gpsutil_disp(const Waypoint* wpt) {
-  int icon_token = 0;
-
-  double lon = degrees2ddmm(wpt->longitude);
-  double lat = degrees2ddmm(wpt->latitude);
-
-  QDateTime dt = wpt->GetCreationTime().toUTC();
-  const QString ds = dt.toString("dd-MMM-yy hh:mm:ss").toUpper();
-
-  if (deficon) {
-    icon_token = atoi(deficon);
-  } else {
-    icon_token = gt_find_icon_number_from_desc(wpt->icon_descr, PCX);
-    if (get_cache_icon(wpt)) {
-      icon_token = gt_find_icon_number_from_desc(get_cache_icon(wpt), PCX);
-    }
-  }
-
-  gbfprintf(file_out, "W  %-6.6s %c%08.5f %c%011.5f %s %5.f %-40.40s %5e  %d\n",
-            global_opts.synthesize_shortnames
-                ? CSTRc(mkshort_from_wpt(mkshort_handle, wpt))
-                : CSTRc(wpt->shortname),
-            lat < 0.0 ? 'S' : 'N', fabs(lat), lon < 0.0 ? 'W' : 'E', fabs(lon),
-            CSTR(ds), (wpt->altitude == unknown_alt) ? -9999 : wpt->altitude,
-            (wpt->description != nullptr) ? CSTRc(wpt->description) : "", 0.0,
-            icon_token);
-}
-
-static void pcx_track_hdr(const route_head* trk) {
-  route_ctr++;
-
-  QString default_name = QString::asprintf("Trk%03d", route_ctr);
-  QString name =
-      mkshort(mkshort_handle2,
-              trk->rte_name.isEmpty() ? CSTR(default_name) : trk->rte_name);
-  /* Carto Exploreur (popular in France) chokes on trackname headers,
-   * so provide option to suppress these.
-   */
-  if (!cartoexploreur) {
-    gbfprintf(file_out, "\n\nH  TN %s\n", CSTR(name));
-  }
-  gbfprintf(file_out,
-            "H  LATITUDE    LONGITUDE    DATE      TIME     ALT  ;track\n");
-}
-
-static void pcx_route_hdr(const route_head* rte) {
-  route_ctr++;
-  QString default_name = QString::asprintf("Rte%03d", route_ctr);
-
-  QString name = mkshort(
-      mkshort_handle2, rte->rte_name.isEmpty() ? default_name : rte->rte_name);
-
-  /* see pcx_track_hdr */
-  if (!cartoexploreur) {
-    gbfprintf(file_out, "\n\nR  %s\n", CSTR(name));
-  }
-  gbfprintf(file_out,
-            "\n"
-            "H  IDNT   LATITUDE    LONGITUDE    DATE      TIME     ALT   "
-            "DESCRIPTION                              PROXIMITY     SYMBOL "
-            ";waypts\n");
-}
-
-static void pcx_track_disp(const Waypoint* wpt) {
-  double lon = degrees2ddmm(wpt->longitude);
-  double lat = degrees2ddmm(wpt->latitude);
-
-  QDateTime dt = wpt->GetCreationTime().toUTC();
-  const QString ds = dt.toString("dd-MMM-yy hh:mm:ss").toUpper();
-
-  gbfprintf(file_out, "T  %c%08.5f %c%011.5f %s %.f\n", lat < 0.0 ? 'S' : 'N',
-            fabs(lat), lon < 0.0 ? 'W' : 'E', fabs(lon), CSTR(ds),
-            wpt->altitude);
-}
-
-static void data_write() {
-  gbfprintf(file_out,
-            "H  SOFTWARE NAME & VERSION\n"
-            "I  PCX5 2.09\n"
-            "\n"
-            "H  R DATUM                IDX DA            DF            DX      "
-            "      DY            DZ\n"
-            "M  G WGS 84               121 +0.000000e+00 +0.000000e+00 "
-            "+0.000000e+00 +0.000000e+00 +0.000000e+00\n"
-            "\n"
-            "H  COORDINATE SYSTEM\n"
-            "U  LAT LON DM\n");
-
-  setshort_length(mkshort_handle, 6);
-
-  setshort_length(mkshort_handle2, 20); /* for track and route names */
-  setshort_whitespace_ok(mkshort_handle2, 0);
-  setshort_mustuniq(mkshort_handle2, 0);
-
-  if (global_opts.objective == wptdata) {
-    gbfprintf(file_out,
-              "\n"
-              "H  IDNT   LATITUDE    LONGITUDE    DATE      TIME     ALT   "
-              "DESCRIPTION                              PROXIMITY     SYMBOL "
-              ";waypts\n");
-
-    waypt_disp_all(gpsutil_disp);
-  } else if (global_opts.objective == trkdata) {
-    route_ctr = 0;
-    track_disp_all(pcx_track_hdr, nullptr, pcx_track_disp);
-  } else if (global_opts.objective == rtedata) {
-    route_ctr = 0;
-    route_disp_all(pcx_route_hdr, nullptr, gpsutil_disp);
-  }
-}
-
-ff_vecs_t pcx_vecs = {
-    ff_type_file,      FF_CAP_RW_ALL, rd_init,    wr_init, rd_deinit,
-    wr_deinit,         data_read,     data_write, nullptr,    &pcx_args,
-    CET_CHARSET_ASCII, 1 /* CET-REVIEW */
-  , NULL_POS_OPS,
-  nullptr
-};
diff --git a/pocketfms_bc.cc b/pocketfms_bc.cc
deleted file mode 100644 (file)
index 680ebc2..0000000
+++ /dev/null
@@ -1,190 +0,0 @@
-/*
-    Read and write PocketFMS files.
-
-       Copyright (C) 2009 Tobias Kretschmar, tobias.kretschmar@gmx.de
-
-       This program is free software; you can redistribute it and/or modify
-       it under the terms of the GNU General Public License as published by
-       the Free Software Foundation; either version 2 of the License, or
-       (at your option) any later version.
-
-       This program is distributed in the hope that it will be useful,
-       but WITHOUT ANY WARRANTY; without even the implied warranty of
-       MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-       GNU General Public License for more details.
-
-       You should have received a copy of the GNU General Public License
-       along with this program; if not, write to the Free Software
-       Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
-
- */
-
-#include "defs.h"
-
-#define MYNAME                 "PocketFMS Breadcrumbs"
-
-static char header_id[] = "BRC";
-
-struct breadcrumb {
-  // header
-  char         id[4];            // 0x42 0x52 0x43 0x00 <=> "BRC"
-  uint16_t     version;        // 0x0100
-  uint16_t     reserve1;       // 0x0000
-  // data
-  float                latitude;
-  float                longitude;
-  float                altitude;       // meter
-  float                speed;          // m/s
-  float                course;         // degrees
-  float                magvar;         // degrees
-  float                separation;     // meter
-  float                ehpe;           // estimated horizontal position error
-  float                evpe;           // estimated vertical position error
-  float                espe;           // estimated speed position error
-  uint16_t     fix;            // 1..none, 2..2D, 3..3D, 4..dgps, 5pps
-  uint16_t     year;           // 1999..2999
-  uint16_t     month;          // 1..12
-  uint16_t     day;            // 0..31
-  uint16_t     hour;           // 0.23
-  uint16_t     minute;         // 0..59
-  uint16_t     second;         // 0..59
-  uint16_t     reserve2;       // 0x0000
-};
-
-static gbfile* file_in, *file_out;
-
-static void
-rd_init(const QString& fname)
-{
-  file_in = gbfopen_le(fname, "rb", MYNAME);
-}
-
-static void
-rd_deinit()
-{
-  gbfclose(file_in);
-}
-
-static void
-wr_init(const QString& fname)
-{
-  file_out = gbfopen_le(fname, "wb", MYNAME);
-}
-
-static void
-wr_deinit()
-{
-  gbfclose(file_out);
-}
-
-static void
-read_tracks()
-{
-  breadcrumb bc;
-  auto* trk_head = new route_head;
-  trk_head->rte_num = 1;
-  trk_head->rte_name = "PocketFMS";
-  trk_head->rte_desc = "Breadcrumb";
-  trk_head->rte_urls.AddUrlLink(UrlLink("www.pocketfms.com"));
-  track_add_head(trk_head);
-
-  while (1 == gbfread(&bc, sizeof(bc), 1, file_in)) {
-    struct tm tm;
-
-    if (strcmp(bc.id, header_id) != 0) {
-      fatal(MYNAME ": invalid breadcrumb header in input file.\n");
-    }
-
-    memset(&tm, 0, sizeof(tm));
-    tm.tm_year = le_readu16(&bc.year)-1900;
-    tm.tm_mon = le_readu16(&bc.month)-1;
-    tm.tm_mday = le_readu16(&bc.day);
-    tm.tm_hour = le_readu16(&bc.hour);
-    tm.tm_min = le_readu16(&bc.minute);
-    tm.tm_sec = le_readu16(&bc.second);
-
-    auto* wpt = new Waypoint;
-    wpt->latitude = le_read_float(&bc.latitude);
-    wpt->longitude = le_read_float(&bc.longitude);
-    wpt->altitude = FEET_TO_METERS(le_read_float(&bc.altitude));
-    wpt->SetCreationTime(mkgmtime(&tm));
-    wpt->hdop = le_read_float(&bc.ehpe);
-    wpt->vdop = le_read_float(&bc.evpe);
-    wpt->pdop = le_read_float(&bc.espe);
-    wpt->course = le_read_float(&bc.course);
-    wpt->speed = le_read_float(&bc.speed);
-    wpt->fix = (fix_type)(le_readu16(&bc.fix) - 1);
-
-    track_add_wpt(trk_head, wpt);
-  }
-}
-
-static void
-pocketfms_waypt_disp(const Waypoint* wpt)
-{
-  breadcrumb bc;
-
-  memset(&bc, 0, sizeof(bc));
-  const time_t tt = wpt->GetCreationTime().toTime_t();
-  struct tm* tm = localtime(&tt);
-  if (wpt->creation_time.isValid()) {
-    // It seems odd to reread waypoint time here, but this whole format
-    // is likely short-lived.
-    const time_t tt2 = wpt->GetCreationTime().toTime_t();
-    tm = gmtime(&tt2);
-  }
-
-  strcpy(bc.id, header_id);
-  le_write16(&bc.version, 1);
-  le_write_float(&bc.latitude, wpt->latitude);
-  le_write_float(&bc.longitude, wpt->longitude);
-  le_write_float(&bc.altitude, METERS_TO_FEET(wpt->altitude));
-  if (tm) {
-    le_write16(&bc.year, tm->tm_year + 1900);
-    le_write16(&bc.month, tm->tm_mon + 1);
-    le_write16(&bc.day, tm->tm_mday);
-    le_write16(&bc.hour, tm->tm_hour);
-    le_write16(&bc.minute, tm->tm_min);
-    le_write16(&bc.second, tm->tm_sec);
-  }
-  le_write_float(&bc.ehpe, wpt->hdop);
-  le_write_float(&bc.evpe, wpt->vdop);
-  le_write_float(&bc.espe, wpt->pdop);
-  le_write_float(&bc.course, wpt->course);
-  le_write_float(&bc.speed, wpt->speed);
-  le_write16(&bc.fix, wpt->fix+1);
-
-  gbfwrite(&bc, sizeof(bc), 1, file_out);
-}
-
-static void
-data_read()
-{
-  read_tracks();
-}
-
-static void
-data_write()
-{
-  track_disp_all(nullptr, nullptr, pocketfms_waypt_disp);
-}
-
-ff_vecs_t pocketfms_bc_vecs = {
-  ff_type_file,
-  {
-    ff_cap_none,                               /* waypoints */
-    (ff_cap)(ff_cap_read | ff_cap_write),      /* tracks */
-    ff_cap_none                                        /* routes */
-  },
-  rd_init,
-  wr_init,
-  rd_deinit,
-  wr_deinit,
-  data_read,
-  data_write,
-  nullptr,
-  nullptr,
-  CET_CHARSET_ASCII, 0 /* CET-REVIEW */
-  , NULL_POS_OPS,
-  nullptr
-};
diff --git a/pocketfms_fp.cc b/pocketfms_fp.cc
deleted file mode 100644 (file)
index 79508f8..0000000
+++ /dev/null
@@ -1,193 +0,0 @@
-/*
-       Read PocketFMS flightplan files.
-
-       Copyright (C) 2009 Tobias Kretschmar, tobias.kretschmar@gmx.de
-
-       This program is free software; you can redistribute it and/or modify
-       it under the terms of the GNU General Public License as published by
-       the Free Software Foundation; either version 2 of the License, or
-       (at your option) any later version.
-
-       This program is distributed in the hope that it will be useful,
-       but WITHOUT ANY WARRANTY; without even the implied warranty of
-       MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-       GNU General Public License for more details.
-
-       You should have received a copy of the GNU General Public License
-       along with this program; if not, write to the Free Software
-       Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
-
- */
-
-#include <QString>                      // for QString
-#include <QXmlStreamAttributes>         // for QXmlStreamAttributes
-
-#include "defs.h"
-#include "xmlgeneric.h"                 // for cb_cdata, xg_callback, xg_string, cb_start, cb_end, xg_cb_type, xml_deinit, xml_init, xml_read, xg_tag_mapping
-
-
-static int isFirst = 1;
-static route_head* route = nullptr;
-static Waypoint* wpt_to, *wpt_from;
-static double dest_altitude;
-
-#define MYNAME "PocketFMS FlightPlan"
-
-static xg_callback     wpt_s, wpt_from_lat, wpt_from_lon, wpt_from_name, wpt_from_elev;
-static xg_callback     wpt_e, wpt_to_lat, wpt_to_lon, wpt_to_name, wpt_to_elev, wpt_altitude;
-
-static xg_tag_mapping gl_map[] = {
-  { wpt_s,                     cb_start, "/PocketFMSFlightplan/LIB" },
-  { wpt_from_lat,      cb_cdata, "/PocketFMSFlightplan/LIB/FromPoint/Latitude" },
-  { wpt_from_lon,      cb_cdata, "/PocketFMSFlightplan/LIB/FromPoint/Longitude" },
-  { wpt_from_elev,     cb_cdata, "/PocketFMSFlightplan/LIB/FromPoint/Elevation" },
-  { wpt_from_name,     cb_cdata, "/PocketFMSFlightplan/LIB/FromPoint/FriendlyShortname" },
-  { wpt_to_lat,                cb_cdata, "/PocketFMSFlightplan/LIB/ToPoint/Latitude" },
-  { wpt_to_lon,                cb_cdata, "/PocketFMSFlightplan/LIB/ToPoint/Longitude" },
-  { wpt_to_name,               cb_cdata, "/PocketFMSFlightplan/LIB/ToPoint/FriendlyShortname" },
-  { wpt_to_elev,               cb_cdata, "/PocketFMSFlightplan/LIB/ToPoint/Elevation" },
-  { wpt_altitude,      cb_start, "/PocketFMSFlightplan/LIB/PlannedAltitude" },
-  { wpt_e,                     cb_end,   "/PocketFMSFlightplan/LIB" },
-  { nullptr,   (xg_cb_type)0,          nullptr}
-};
-
-static void
-rd_init(const QString& fname)
-{
-  xml_init(fname, gl_map, nullptr);
-}
-
-static void
-data_read()
-{
-  xml_read();
-}
-
-static void
-rd_deinit()
-{
-  if (route != nullptr) {
-    Waypoint* head = route->waypoint_list.front();
-    Waypoint* tail = route->waypoint_list.back();
-    if (head != nullptr) {
-      route->rte_name = head->shortname;
-    }
-    route->rte_name += " - ";
-    if (tail != nullptr) {
-      route->rte_name += tail->shortname;
-      tail->altitude = dest_altitude;
-    }
-  }
-  xml_deinit();
-}
-
-void   wpt_s(xg_string, const QXmlStreamAttributes*)
-{
-  if (isFirst == 1) {
-    wpt_from = new Waypoint;
-    route = new route_head;
-    route->rte_desc="PocketFMS flightplan";
-    route_add_head(route);
-  }
-  wpt_to = new Waypoint;
-}
-
-void   wpt_e(xg_string, const QXmlStreamAttributes*)
-{
-  if (isFirst == 1) {
-    route_add_wpt(route, wpt_from);
-    if (doing_wpts) {
-      waypt_add(new Waypoint(*wpt_from));
-    }
-    wpt_from = nullptr;
-    isFirst = 0;
-  }
-  route_add_wpt(route, wpt_to);
-  if (doing_wpts) {
-    waypt_add(new Waypoint(*wpt_to));
-  }
-  wpt_to = nullptr;
-}
-
-void   wpt_from_lat(xg_string args, const QXmlStreamAttributes*)
-{
-  if (wpt_from != nullptr) {
-    wpt_from->latitude = args.toDouble();
-  }
-}
-
-void   wpt_from_lon(xg_string args, const QXmlStreamAttributes*)
-{
-  if (wpt_from != nullptr) {
-    wpt_from->longitude = args.toDouble();
-  }
-}
-
-void   wpt_from_name(xg_string args, const QXmlStreamAttributes*)
-{
-  if (wpt_from != nullptr) {
-    wpt_from->shortname += args;
-  }
-}
-
-void   wpt_from_elev(xg_string args, const QXmlStreamAttributes*)
-{
-  if (wpt_from != nullptr) {
-    wpt_from->altitude = FEET_TO_METERS(args.toDouble());
-  }
-}
-
-void   wpt_to_lat(xg_string args, const QXmlStreamAttributes*)
-{
-  wpt_to->latitude = args.toDouble();
-}
-
-void   wpt_to_lon(xg_string args, const QXmlStreamAttributes*)
-{
-  wpt_to->longitude = args.toDouble();
-}
-
-void   wpt_to_name(xg_string args, const QXmlStreamAttributes*)
-{
-  wpt_to->shortname += args;
-}
-
-void   wpt_to_elev(xg_string args, const QXmlStreamAttributes*)
-{
-  dest_altitude = FEET_TO_METERS(args.toDouble());
-}
-
-void   wpt_altitude(xg_string, const QXmlStreamAttributes* attrv)
-{
-  int isFeet = 0;
-
-  if (attrv->hasAttribute("Value")) {
-    wpt_to->altitude = attrv->value("Value").toString().toDouble();
-  }
-  if (attrv->hasAttribute("Unit")) {
-    isFeet = (attrv->value("Unit") == u"ft");
-  }
-  if (isFeet) {
-    wpt_to->altitude = FEET_TO_METERS(wpt_to->altitude);
-  }
-}
-
-ff_vecs_t pocketfms_fp_vecs = {
-  ff_type_file,
-  {
-    ff_cap_read        /* waypoints */,
-    ff_cap_none        /* tracks */,
-    ff_cap_read        /* routes */
-  },
-  rd_init,
-  nullptr,
-  rd_deinit,
-  nullptr,
-  data_read,
-  nullptr,
-  nullptr,
-  nullptr,
-  CET_CHARSET_ASCII, 0 /* CET-REVIEW */
-  , NULL_POS_OPS,
-  nullptr
-};
diff --git a/pocketfms_wp.cc b/pocketfms_wp.cc
deleted file mode 100644 (file)
index 40ffd3a..0000000
+++ /dev/null
@@ -1,157 +0,0 @@
-/*
-       PocketFMS waypoint text files (wpt).
-
-       Copyright (C) 2009 Tobias Kretschmar, tobias.kretschmar@gmx.de
-
-       This program is free software; you can redistribute it and/or modify
-       it under the terms of the GNU General Public License as published by
-       the Free Software Foundation; either version 2 of the License, or
-       (at your option) any later version.
-
-       This program is distributed in the hope that it will be useful,
-       but WITHOUT ANY WARRANTY; without even the implied warranty of
-       MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-       GNU General Public License for more details.
-
-       You should have received a copy of the GNU General Public License
-       along with this program; if not, write to the Free Software
-       Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
- */
-
-#include "defs.h"
-#include "csv_util.h"
-#include <cstdio>
-#include <cstdlib>
-
-#define MYNAME "PocketFMS waypoint text file format"
-
-static gbfile* file_in, *file_out;
-
-static void
-rd_init(const QString& fname)
-{
-  file_in = gbfopen_le(fname, "r", MYNAME);
-}
-
-static double wppos_to_dec(char* value)
-{
-  if (strstr(value, "\xB0") == nullptr) {
-    return atof(value);
-  } else {
-    int degrees, minutes;
-    float seconds;
-    int sign = 1;
-
-    if (toupper(value[0]) == 'N' || toupper(value[0]) == 'E' || value[0] == '+') {
-      value = &value[1];
-    } else if (toupper(value[0]) == 'S' || toupper(value[0]) == 'W' || value[0] == '-') {
-      value = &value[1];
-      sign = -1;
-    }
-
-    sscanf(value, "%d\xB0%d'%f\"", &degrees, &minutes, &seconds);
-    return sign * (degrees + ((float)minutes / 60) + (seconds / 3600));
-  }
-}
-
-static void
-data_read()
-{
-  char* buff;
-  int linecount = 0;
-  while ((buff = gbfgetstr(file_in))) {
-    rtrim(buff);
-    if (strlen(buff) == 0) {
-      break;
-    }
-    linecount++;
-    auto* wpt = new Waypoint;
-    char* s = buff;
-    s = csv_lineparse(s, "\\w", "", linecount);
-    if (!s) {
-      fatal(MYNAME "Invalid name");
-    }
-    wpt->shortname = s;
-    s = csv_lineparse(nullptr, "\\w", "", linecount);
-    if (!s) {
-      fatal(MYNAME "Invalid latitude %s", qPrintable(wpt->shortname));
-    }
-    wpt->latitude = wppos_to_dec(s);
-
-    s = csv_lineparse(nullptr, "\\w", "", linecount);
-    if (!s) {
-      fatal(MYNAME "Invalid longitude %s", qPrintable(wpt->shortname));
-    }
-    wpt->longitude = wppos_to_dec(s);
-    waypt_add(wpt);
-
-    // continue reading until csv_lineparse returns null indicating all dynamic memory has been deallocated.
-    while (csv_lineparse(nullptr, "\\w", "", linecount));
-  }
-}
-
-static void
-rd_deinit()
-{
-  gbfclose(file_in);
-}
-
-static void
-wr_init(const QString& fname)
-{
-  file_out = gbfopen_le(fname, "w", MYNAME);
-}
-
-static void
-enigma_waypt_disp(const Waypoint* wpt)
-{
-  if (!wpt->shortname.isEmpty()) {
-    // The output might have a space or control character.
-    int l = wpt->shortname.length();
-    char *t = (char*) xmalloc(l + 1);
-    char* d = t;
-    for (int i = 0; i < l; i++) {
-      char s = wpt->shortname[i].cell();
-      if (isgraph(s)) {
-        *d++ = s;
-      }
-    }
-    *d = 0;
-    gbfprintf(file_out, "%s %f %f\n", t, wpt->latitude, wpt->longitude);
-    xfree(t);
-  } else {
-    gbfprintf(file_out, "%s %f %f\n", "NONAME", wpt->latitude, wpt->longitude);
-  }
-}
-
-static void
-data_write()
-{
-  waypt_disp_all(enigma_waypt_disp);
-}
-
-static void
-wr_deinit()
-{
-  gbfclose(file_out);
-}
-
-ff_vecs_t pocketfms_wp_vecs = {
-  ff_type_file,
-  {
-    (ff_cap)(ff_cap_read | ff_cap_write),      /* waypoints */
-    ff_cap_none,                    /* tracks */
-    ff_cap_none,                       /* routes */
-  },
-  rd_init,
-  wr_init,
-  rd_deinit,
-  wr_deinit,
-  data_read,
-  data_write,
-  nullptr,
-  nullptr,
-  CET_CHARSET_ASCII, 0 /* CET-REVIEW */
-  , NULL_POS_OPS,
-  nullptr
-};
diff --git a/reference/compegps-wpt.gpx b/reference/compegps-wpt.gpx
deleted file mode 100644 (file)
index 949d156..0000000
+++ /dev/null
@@ -1,173 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<gpx version="1.0" creator="GPSBabel - https://www.gpsbabel.org" xmlns="http://www.topografix.com/GPX/1/0">
-  <time>1970-01-01T00:00:00Z</time>
-  <bounds minlat="45.988538473" minlon="11.609659845" maxlat="46.159847646" maxlon="12.121156748"/>
-  <wpt lat="46.029489931" lon="11.825879086">
-    <ele>1400.000</ele>
-    <name>F01140</name>
-    <cmt>DECOLLO MONTE AVENA</cmt>
-    <desc>DECOLLO MONTE AVENA</desc>
-    <sym>Waypoint</sym>
-  </wpt>
-  <wpt lat="46.008626612" lon="11.860931698">
-    <ele>300.000</ele>
-    <name>F02030</name>
-    <cmt>AVIOSUPERFICE FELTRE</cmt>
-    <desc>AVIOSUPERFICE FELTRE</desc>
-    <sym>Waypoint</sym>
-  </wpt>
-  <wpt lat="46.021150004" lon="11.885480080">
-    <ele>230.000</ele>
-    <name>F03023</name>
-    <cmt>ATTERRAGGIO VALENTINE</cmt>
-    <desc>ATTERRAGGIO VALENTINE</desc>
-    <sym>Waypoint</sym>
-  </wpt>
-  <wpt lat="46.033586576" lon="11.882367229">
-    <ele>320.000</ele>
-    <name>F04032</name>
-    <cmt>ATTERRAG. BIRRERIA PEDAVENA</cmt>
-    <desc>ATTERRAG. BIRRERIA PEDAVENA</desc>
-    <sym>Waypoint</sym>
-  </wpt>
-  <wpt lat="46.159847646" lon="12.083258100">
-    <ele>420.000</ele>
-    <name>F06042</name>
-    <cmt>DIGA DEL MIS</cmt>
-    <desc>DIGA DEL MIS</desc>
-    <sym>Waypoint</sym>
-  </wpt>
-  <wpt lat="46.144176666" lon="12.075475551">
-    <ele>460.000</ele>
-    <name>F07046</name>
-    <cmt>SOSPIROLO CHIESA</cmt>
-    <desc>SOSPIROLO CHIESA</desc>
-    <sym>Waypoint</sym>
-  </wpt>
-  <wpt lat="46.081281529" lon="11.985699010">
-    <ele>450.000</ele>
-    <name>F08045</name>
-    <cmt>CESIOMAGGIORE FABBRICA</cmt>
-    <desc>CESIOMAGGIORE FABBRICA</desc>
-    <sym>Waypoint</sym>
-  </wpt>
-  <wpt lat="46.075557491" lon="12.033310749">
-    <ele>290.000</ele>
-    <name>F09029</name>
-    <cmt>CARTIERA SGIUSTINA</cmt>
-    <desc>CARTIERA SGIUSTINA</desc>
-    <sym>Waypoint</sym>
-  </wpt>
-  <wpt lat="45.988538473" lon="11.845020688">
-    <ele>380.000</ele>
-    <name>F10038</name>
-    <cmt>SEREN DEL GRAPPA CHIESA</cmt>
-    <desc>SEREN DEL GRAPPA CHIESA</desc>
-    <sym>Waypoint</sym>
-  </wpt>
-  <wpt lat="46.010513118" lon="11.830375818">
-    <ele>346.900</ele>
-    <name>F11031</name>
-    <cmt>ARTEN FELTRE</cmt>
-    <desc>ARTEN FELTRE</desc>
-    <sym>Waypoint</sym>
-  </wpt>
-  <wpt lat="46.047897102" lon="11.873818128">
-    <ele>450.000</ele>
-    <name>F12045</name>
-    <cmt>NORCEN CAMPI DA TENNIS</cmt>
-    <desc>NORCEN CAMPI DA TENNIS</desc>
-    <sym>Waypoint</sym>
-  </wpt>
-  <wpt lat="46.152906683" lon="12.121156748">
-    <ele>380.000</ele>
-    <name>F13038</name>
-    <cmt>SOSPIROLO CAVA</cmt>
-    <desc>SOSPIROLO CAVA</desc>
-    <sym>Waypoint</sym>
-  </wpt>
-  <wpt lat="46.042745832" lon="11.852392523">
-    <ele>1010.000</ele>
-    <name>F14101</name>
-    <cmt>COL MELON RIF BELVEDERE</cmt>
-    <desc>COL MELON RIF BELVEDERE</desc>
-    <sym>Waypoint</sym>
-  </wpt>
-  <wpt lat="46.010879760" lon="11.813717946">
-    <ele>310.000</ele>
-    <name>F15031</name>
-    <cmt>FONZASO SPORTFUL</cmt>
-    <desc>FONZASO SPORTFUL</desc>
-    <sym>Waypoint</sym>
-  </wpt>
-  <wpt lat="46.040623535" lon="11.984049113">
-    <ele>252.300</ele>
-    <name>F16025</name>
-    <cmt>BUSCHE LATTERIA</cmt>
-    <desc>BUSCHE LATTERIA</desc>
-    <sym>Waypoint</sym>
-  </wpt>
-  <wpt lat="46.046930843" lon="11.748528051">
-    <ele>605.000</ele>
-    <name>F17063</name>
-    <cmt>LAMON</cmt>
-    <desc>LAMON</desc>
-    <sym>Waypoint</sym>
-  </wpt>
-  <wpt lat="45.991673928" lon="11.746357624">
-    <ele>509.400</ele>
-    <name>F18051</name>
-    <cmt>ARSIE'</cmt>
-    <desc>ARSIE'</desc>
-    <sym>Waypoint</sym>
-  </wpt>
-  <wpt lat="46.018978905" lon="11.911089765">
-    <ele>271.200</ele>
-    <name>F19027</name>
-    <cmt>CASTELLO DI FELTRE</cmt>
-    <desc>CASTELLO DI FELTRE</desc>
-    <sym>Waypoint</sym>
-  </wpt>
-  <wpt lat="46.011490645" lon="11.833422633">
-    <ele>300.000</ele>
-    <name>F20030</name>
-    <cmt>SANTA LUCIA CHIESETTA</cmt>
-    <desc>SANTA LUCIA CHIESETTA</desc>
-    <sym>Waypoint</sym>
-  </wpt>
-  <wpt lat="46.039976504" lon="11.825483515">
-    <ele>1430.000</ele>
-    <name>F21143</name>
-    <cmt>MALGA CAMPON</cmt>
-    <desc>MALGA CAMPON</desc>
-    <sym>Waypoint</sym>
-  </wpt>
-  <wpt lat="46.050825348" lon="12.061925180">
-    <ele>300.000</ele>
-    <name>F22030</name>
-    <cmt>ZANUSSI MEL</cmt>
-    <desc>ZANUSSI MEL</desc>
-    <sym>Waypoint</sym>
-  </wpt>
-  <wpt lat="46.022014968" lon="11.907799546">
-    <ele>270.000</ele>
-    <name>F23027</name>
-    <cmt>FELTRE OSPEDALE</cmt>
-    <desc>FELTRE OSPEDALE</desc>
-    <sym>Waypoint</sym>
-  </wpt>
-  <wpt lat="46.063284117" lon="11.609659845">
-    <ele>860.000</ele>
-    <name>F24086</name>
-    <cmt>BAILO CASTEL TESINO</cmt>
-    <desc>BAILO CASTEL TESINO</desc>
-    <sym>Waypoint</sym>
-  </wpt>
-  <wpt lat="46.057193356" lon="11.888858143">
-    <ele>450.000</ele>
-    <name>F25045</name>
-    <cmt>CASA SCEICCO</cmt>
-    <desc>CASA SCEICCO</desc>
-    <sym>Waypoint</sym>
-  </wpt>
-</gpx>
diff --git a/reference/compegps.wpt b/reference/compegps.wpt
deleted file mode 100644 (file)
index 7225475..0000000
+++ /dev/null
@@ -1,52 +0,0 @@
-G  WGS 84
-U  1
-W  F01140 A 46.0294899313ºN 11.8258790855ºE 27-MAR-62 00:00:00 1400.000000 DECOLLO MONTE AVENA
-w Waypoint,0,0.0,16777215,255,1,7,,10.0
-W  F02030 A 46.0086266116ºN 11.8609316981ºE 27-MAR-62 00:00:00 300.000000 AVIOSUPERFICE FELTRE
-w Waypoint,0,0.0,16777215,255,1,7,,10.0
-W  F03023 A 46.0211500041ºN 11.8854800796ºE 27-MAR-62 00:00:00 230.000000 ATTERRAGGIO VALENTINE
-w Waypoint,0,0.0,16777215,255,1,7,,10.0
-W  F04032 A 46.0335865765ºN 11.8823672293ºE 27-MAR-62 00:00:00 320.000000 ATTERRAG. BIRRERIA PEDAVENA
-w Waypoint,0,0.0,16777215,255,1,7,,10.0
-W  F06042 A 46.1598476455ºN 12.0832581003ºE 27-MAR-62 00:00:00 420.000000 DIGA DEL MIS
-w Waypoint,0,0.0,16777215,255,1,7,,10.0
-W  F07046 A 46.1441766659ºN 12.0754755514ºE 27-MAR-62 00:00:00 460.000000 SOSPIROLO CHIESA
-w Waypoint,0,0.0,16777215,255,1,7,,10.0
-W  F08045 A 46.0812815292ºN 11.9856990105ºE 27-MAR-62 00:00:00 450.000000 CESIOMAGGIORE FABBRICA
-w Waypoint,0,0.0,16777215,255,1,7,,10.0
-W  F09029 A 46.0755574914ºN 12.0333107491ºE 27-MAR-62 00:00:00 290.000000 CARTIERA SGIUSTINA
-w Waypoint,0,0.0,16777215,255,1,7,,10.0
-W  F10038 A 45.9885384730ºN 11.8450206880ºE 27-MAR-62 00:00:00 380.000000 SEREN DEL GRAPPA CHIESA
-w Waypoint,0,0.0,16777215,255,1,7,,10.0
-W  F11031 A 46.0105131183ºN 11.8303758183ºE 27-MAR-62 00:00:00 346.900000 ARTEN FELTRE
-w Waypoint,0,0.0,16777215,255,1,7,,10.0
-W  F12045 A 46.0478971020ºN 11.8738181282ºE 27-MAR-62 00:00:00 450.000000 NORCEN CAMPI DA TENNIS
-w Waypoint,0,0.0,16777215,255,1,7,,10.0
-W  F13038 A 46.1529066825ºN 12.1211567478ºE 27-MAR-62 00:00:00 380.000000 SOSPIROLO CAVA
-w Waypoint,0,0.0,16777215,255,1,7,,0.0
-W  F14101 A 46.0427458323ºN 11.8523925232ºE 27-MAR-62 00:00:00 1010.000000 COL MELON RIF BELVEDERE
-w Waypoint,0,0.0,16777215,255,1,7,,0.0
-W  F15031 A 46.0108797603ºN 11.8137179459ºE 27-MAR-62 00:00:00 310.000000 FONZASO SPORTFUL
-w Waypoint,0,0.0,16777215,255,1,7,,0.0
-W  F16025 A 46.0406235353ºN 11.9840491129ºE 27-MAR-62 00:00:00 252.300000 BUSCHE LATTERIA
-w Waypoint,0,0.0,16777215,255,1,7,,0.0
-W  F17063 A 46.0469308434ºN 11.7485280506ºE 27-MAR-62 00:00:00 605.000000 LAMON
-w Waypoint,0,0.0,16777215,255,1,7,,0.0
-W  F18051 A 45.9916739281ºN 11.7463576240ºE 27-MAR-62 00:00:00 509.400000 ARSIE'
-w Waypoint,0,0.0,16777215,255,1,7,,0.0
-W  F19027 A 46.0189789055ºN 11.9110897654ºE 27-MAR-62 00:00:00 271.200000 CASTELLO DI FELTRE
-w Waypoint,0,0.0,16777215,255,1,7,,0.0
-W  F20030 A 46.0114906453ºN 11.8334226329ºE 27-MAR-62 00:00:00 300.000000 SANTA LUCIA CHIESETTA
-w Waypoint,0,0.0,16777215,255,1,7,,0.0
-W  F21143 A 46.0399765040ºN 11.8254835151ºE 27-MAR-62 00:00:00 1430.000000 MALGA CAMPON
-w Waypoint,0,0.0,16777215,255,1,7,,0.0
-W  F22030 A 46.0508253483ºN 12.0619251800ºE 27-MAR-62 00:00:00 300.000000 ZANUSSI MEL
-w Waypoint,0,0.0,16777215,255,1,7,,0.0
-W  F23027 A 46.0220149684ºN 11.9077995458ºE 27-MAR-62 00:00:00 270.000000 FELTRE OSPEDALE
-w Waypoint,0,0.0,16777215,255,1,7,,0.0
-W  F24086 A 46.0632841167ºN 11.6096598449ºE 27-MAR-62 00:00:00 860.000000 BAILO CASTEL TESINO
-w Waypoint,0,0.0,16777215,255,1,7,,0.0
-W  F25045 A 46.0571933560ºN 11.8888581427ºE 27-MAR-62 00:00:00 450.000000 CASA SCEICCO
-w Waypoint,0,0.0,16777215,255,1,7,,0.0
-
-
diff --git a/reference/compegps.wpt.gz b/reference/compegps.wpt.gz
deleted file mode 100644 (file)
index 3f4566b..0000000
Binary files a/reference/compegps.wpt.gz and /dev/null differ
diff --git a/reference/compegps_time.wpt b/reference/compegps_time.wpt
deleted file mode 100644 (file)
index bc8b3e2..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
-
-W  wpt001 A 41.80711816ºN 2.34416887ºE 16-MAY-2010 09:30:03 0.000000
-
-w Waypoint,0,-1.0,16317688,248,1,39,,0.0,0,-1,0
-
-W  wpt002 A 41.80695656ºN 2.34409159ºE 16-MAY-2010 09:35:49 1099.570068
-
-w Waypoint,0,-1.0,16317688,248,1,39,,0.0,0,-1,0
-
diff --git a/reference/compegps_time_wpt.gpx b/reference/compegps_time_wpt.gpx
deleted file mode 100644 (file)
index e57888a..0000000
+++ /dev/null
@@ -1,21 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<gpx version="1.0" creator="GPSBabel - https://www.gpsbabel.org" xmlns="http://www.topografix.com/GPX/1/0">
-  <time>1970-01-01T00:00:00Z</time>
-  <bounds minlat="41.806956560" minlon="2.344091590" maxlat="41.807118160" maxlon="2.344168870"/>
-  <wpt lat="41.807118160" lon="2.344168870">
-    <ele>0.000</ele>
-    <time>2010-05-16T09:30:03Z</time>
-    <name>wpt001</name>
-    <cmt>wpt001</cmt>
-    <desc>wpt001</desc>
-    <sym>Waypoint</sym>
-  </wpt>
-  <wpt lat="41.806956560" lon="2.344091590">
-    <ele>1099.570</ele>
-    <time>2010-05-16T09:35:49Z</time>
-    <name>wpt002</name>
-    <cmt>wpt002</cmt>
-    <desc>wpt002</desc>
-    <sym>Waypoint</sym>
-  </wpt>
-</gpx>
diff --git a/reference/expertgps-g7t.txt b/reference/expertgps-g7t.txt
deleted file mode 100644 (file)
index a02cd2d..0000000
+++ /dev/null
@@ -1,216 +0,0 @@
-Grid   Lat/Lon hddd°mm.mmm'\r
-Datum  WGS 84\r
-\r
-Header Name    Description     Type    Position        Altitude        Depth   Proximity       Temperature     Display Mode    Color   Symbol  Facility        City    State   Country Date Modified   Link    Categories\r
-\r
-Waypoint       5058ROAD        ROAD CROSSING   User Waypoint   N42 26.400 W71 07.255   54 m                            Symbol & Name   Unknown Waypoint                                        02/06/2001 00:18:14             \r
-Waypoint       5066            User Waypoint   N42 26.333 W71 07.157   45 m                            Symbol & Name   Unknown Crossing                                        28/11/2001 21:05:28             \r
-Waypoint       5067            User Waypoint   N42 26.354 W71 07.181   58 m                            Symbol & Name   Unknown Waypoint                                        02/06/2001 03:26:55             \r
-Waypoint       5096            User Waypoint   N42 26.335 W71 06.969   45 m                            Symbol & Name   Unknown Waypoint                                        16/11/2001 23:03:38             \r
-Waypoint       5142            User Waypoint   N42 26.634 W71 07.323   51 m                            Symbol & Name   Unknown Waypoint                                        28/11/2001 21:05:28             \r
-Waypoint       5144SUMMIT              User Waypoint   N42 26.722 W71 07.371   62 m                            Symbol & Name   Unknown Summit                                  28/11/2001 21:05:28             \r
-Waypoint       5148NANEPA              User Waypoint   N42 26.986 W71 07.339   120 m                           Symbol & Name   Unknown Waypoint                                        07/11/2001 23:53:41             \r
-Waypoint       5150TANK        WATER TANK      User Waypoint   N42 26.504 W71 07.301   67 m                            Symbol & Name   Unknown Museum                                  02/06/2001 00:18:16             \r
-Waypoint       5156            User Waypoint   N42 26.838 W71 07.287   128 m                           Symbol & Name   Unknown Waypoint                                        02/06/2001 03:26:58             \r
-Waypoint       5179DEAD        Dead End        User Waypoint   N42 26.992 W71 07.158   117 m                           Symbol & Name   Unknown Danger Area                                     02/06/2001 03:26:59             \r
-Waypoint       5224            User Waypoint   N42 27.292 W71 07.506   97 m                            Symbol & Name   Unknown Waypoint                                        02/06/2001 03:26:59             \r
-Waypoint       5229            User Waypoint   N42 27.545 W71 07.499   83 m                            Symbol & Name   Unknown Waypoint                                        02/06/2001 03:26:59             \r
-Waypoint       5236BRIDGE      Bridge  User Waypoint   N42 27.388 W71 07.479   90 m                            Symbol & Name   Unknown Bridge                                  02/06/2001 03:26:59             \r
-Waypoint       5237            User Waypoint   N42 27.419 W71 07.468   83 m                            Symbol & Name   Unknown Waypoint                                        02/06/2001 03:26:59             \r
-Waypoint       5239ROAD        Road    User Waypoint   N42 27.557 W71 07.474   81 m                            Symbol & Name   Unknown Truck Stop                                      02/06/2001 03:27:00             \r
-Waypoint       5252PURPLE              User Waypoint   N42 27.195 W71 07.273   78 m                            Symbol & Name   Unknown Summit                                  07/11/2001 23:53:41             \r
-Waypoint       5254            User Waypoint   N42 27.264 W71 07.259   67 m                            Symbol & Name   Unknown Waypoint                                        28/11/2001 21:05:28             \r
-Waypoint       5258            User Waypoint   N42 27.087 W71 07.305   75 m                            Symbol & Name   Unknown Waypoint                                        07/11/2001 23:53:41             \r
-Waypoint       5264            User Waypoint   N42 27.264 W71 07.240   65 m                            Symbol & Name   Unknown Waypoint                                        28/11/2001 21:05:28             \r
-Waypoint       526708          User Waypoint   N42 27.466 W71 07.263   77 m                            Symbol & Name   Unknown Waypoint                                        02/06/2001 03:27:00             \r
-Waypoint       526750          User Waypoint   N42 27.425 W71 07.219   75 m                            Symbol & Name   Unknown Waypoint                                        02/06/2001 03:27:00             \r
-Waypoint       5267OBSTAC              User Waypoint   N42 27.443 W71 07.191   74 m                            Symbol & Name   Unknown Amusement Park                                  02/06/2001 03:27:00             \r
-Waypoint       527614          User Waypoint   N42 27.396 W71 07.181   79 m                            Symbol & Name   Unknown Waypoint                                        07/11/2001 23:53:41             \r
-Waypoint       527631          User Waypoint   N42 27.375 W71 07.161   79 m                            Symbol & Name   Unknown Waypoint                                        07/11/2001 23:53:41             \r
-Waypoint       5278            User Waypoint   N42 27.489 W71 07.148   68 m                            Symbol & Name   Unknown Waypoint                                        02/06/2001 03:27:00             \r
-Waypoint       5278ROAD        Road    User Waypoint   N42 27.527 W71 07.139   67 m                            Symbol & Name   Unknown Truck Stop                                      02/06/2001 03:27:01             \r
-Waypoint       5287WATER       Reservoir       User Waypoint   N42 27.464 W71 07.049   68 m                            Symbol & Name   Unknown Swimming Area                                   02/06/2001 03:27:01             \r
-Waypoint       5289            User Waypoint   N42 27.563 W71 07.062   64 m                            Symbol & Name   Unknown Waypoint                                        02/06/2001 03:27:01             \r
-Waypoint       5299DEAD        Dead End        User Waypoint   N42 27.578 W71 06.991   69 m                            Symbol & Name   Unknown Danger Area                                     02/06/2001 03:27:01             \r
-Waypoint       5374FIRE                User Waypoint   N42 27.851 W71 07.190   53 m                            Symbol & Name   Unknown Waypoint                                        28/11/2001 21:05:28             \r
-Waypoint       5376            User Waypoint   N42 27.939 W71 07.164   56 m                            Symbol & Name   Unknown Waypoint                                        02/06/2001 03:27:02             \r
-Waypoint       5376BRIDGE      Bridge  User Waypoint   N42 27.946 W71 07.189   55 m                            Symbol & Name   Unknown Bridge                                  02/06/2001 03:27:01             \r
-Waypoint       5376DEAD        Dead End        User Waypoint   N42 27.929 W71 07.149   57 m                            Symbol & Name   Unknown Danger Area                                     02/06/2001 03:27:02             \r
-Waypoint       5376STREAM              User Waypoint   N42 27.955 W71 07.160   65 m                            Symbol & Name   Unknown Bridge                                  07/11/2001 23:53:41             \r
-Waypoint       6006            User Waypoint   N42 26.341 W71 06.867   56 m                            Symbol & Name   Unknown Waypoint                                        02/06/2001 03:26:55             \r
-Waypoint       6006BLUE                User Waypoint   N42 26.316 W71 06.888   46 m                            Symbol & Name   Unknown Waypoint                                        28/11/2001 21:05:28             \r
-Waypoint       6014MEADOW              User Waypoint   N42 26.205 W71 06.793   38 m                            Symbol & Name   Unknown Waypoint                                        28/11/2001 21:05:28             \r
-Waypoint       6016    Bike Loop Connector     User Waypoint   N42 26.320 W71 06.845   43 m                            Symbol & Name   Unknown Waypoint                                        28/11/2001 21:05:28             \r
-Waypoint       6029            User Waypoint   N42 26.505 W71 06.793   56 m                            Symbol & Name   Unknown Waypoint                                        02/06/2001 03:26:55             \r
-Waypoint       6042CROSS       Crossing        User Waypoint   N42 26.128 W71 06.580   45 m                            Symbol & Name   Unknown Crossing                                        02/06/2001 03:27:05             \r
-Waypoint       6053            User Waypoint   N42 26.175 W71 06.545   50 m                            Symbol & Name   Unknown Waypoint                                        02/06/2001 03:27:05             \r
-Waypoint       6066            User Waypoint   N42 26.355 W71 06.450   26 m                            Symbol & Name   Unknown Waypoint                                        02/06/2001 03:26:57             \r
-Waypoint       6067            User Waypoint   N42 26.386 W71 06.455   34 m                            Symbol & Name   Unknown Waypoint                                        02/06/2001 03:26:57             \r
-Waypoint       6071            User Waypoint   N42 26.086 W71 06.352   30 m                            Symbol & Name   Unknown Waypoint                                        02/06/2001 03:26:57             \r
-Waypoint       6073            User Waypoint   N42 25.998 W71 06.396   15 m                            Symbol & Name   Unknown Waypoint                                        02/06/2001 03:26:56             \r
-Waypoint       6077LOGS        Log Crossing    User Waypoint   N42 26.370 W71 06.393   32 m                            Symbol & Name   Unknown Amusement Park                                  02/06/2001 00:18:16             \r
-Waypoint       6084            User Waypoint   N42 26.240 W71 06.286   38 m                            Symbol & Name   Unknown Waypoint                                        02/06/2001 03:26:57             \r
-Waypoint       6121DEAD        Dead End        User Waypoint   N42 26.587 W71 06.760   56 m                            Symbol & Name   Unknown Danger Area                                     02/06/2001 03:26:57             \r
-Waypoint       6130            User Waypoint   N42 26.532 W71 06.658   64 m                            Symbol & Name   Unknown Waypoint                                        02/06/2001 03:26:55             \r
-Waypoint       6131            User Waypoint   N42 26.579 W71 06.686   64 m                            Symbol & Name   Unknown Waypoint                                        02/06/2001 03:26:58             \r
-Waypoint       6153            User Waypoint   N42 26.686 W71 06.533   63 m                            Symbol & Name   Unknown Waypoint                                        02/06/2001 03:27:05             \r
-Waypoint       6155DEAD        Dead End        User Waypoint   N42 26.808 W71 06.527   61 m                            Symbol & Name   Unknown Danger Area                                     02/06/2001 03:27:04             \r
-Waypoint       6171            User Waypoint   N42 26.616 W71 06.378   55 m                            Symbol & Name   Unknown Waypoint                                        02/06/2001 03:27:05             \r
-Waypoint       6176            User Waypoint   N42 26.868 W71 06.397   62 m                            Symbol & Name   Unknown Waypoint                                        02/06/2001 03:27:04             \r
-Waypoint       6177            User Waypoint   N42 26.907 W71 06.369   62 m                            Symbol & Name   Unknown Waypoint                                        02/06/2001 03:27:04             \r
-Waypoint       6181CROSS       Crossing        User Waypoint   N42 26.580 W71 06.353   53 m                            Symbol & Name   Unknown Crossing                                        02/06/2001 03:27:05             \r
-Waypoint       6272            User Waypoint   N42 27.205 W71 06.407   70 m                            Symbol & Name   Unknown Waypoint                                        02/06/2001 03:26:55             \r
-Waypoint       6278            User Waypoint   N42 27.498 W71 06.406   70 m                            Symbol & Name   Unknown Waypoint                                        02/06/2001 03:27:04             \r
-Waypoint       6280            User Waypoint   N42 27.086 W71 06.325   58 m                            Symbol & Name   Unknown Waypoint                                        16/11/2001 23:03:38             \r
-Waypoint       6283            User Waypoint   N42 27.231 W71 06.312   67 m                            Symbol & Name   Unknown Waypoint                                        16/11/2001 23:03:38             \r
-Waypoint       6289            User Waypoint   N42 27.599 W71 06.370   73 m                            Symbol & Name   Unknown Waypoint                                        16/11/2001 23:03:38             \r
-Waypoint       6297            User Waypoint   N42 27.457 W71 06.307   73 m                            Symbol & Name   Unknown Waypoint                                        02/06/2001 03:27:04             \r
-Waypoint       6328            User Waypoint   N42 28.027 W71 06.814   54 m                            Symbol & Name   Unknown Waypoint                                        02/06/2001 03:27:02             \r
-Waypoint       6353DEAD        Dead End        User Waypoint   N42 27.767 W71 06.599   47 m                            Symbol & Name   Unknown Danger Area                                     02/06/2001 03:27:03             \r
-Waypoint       6354            User Waypoint   N42 27.852 W71 06.592   44 m                            Symbol & Name   Unknown Waypoint                                        02/06/2001 03:27:03             \r
-Waypoint       635722          User Waypoint   N42 27.988 W71 06.604   49 m                            Symbol & Name   Unknown Waypoint                                        02/06/2001 03:27:02             \r
-Waypoint       635783          User Waypoint   N42 27.993 W71 06.565   49 m                            Symbol & Name   Unknown Waypoint                                        02/06/2001 03:27:02             \r
-Waypoint       6373            User Waypoint   N42 27.810 W71 06.427   62 m                            Symbol & Name   Unknown Waypoint                                        02/06/2001 03:27:03             \r
-Waypoint       6634            User Waypoint   N42 24.063 W71 06.614   4 m                             Symbol & Name   Unknown Waypoint                                        02/06/2001 03:26:56             \r
-Waypoint       6979            User Waypoint   N42 25.957 W71 06.392   13 m                            Symbol & Name   Unknown Waypoint                                        02/06/2001 03:26:56             \r
-Waypoint       6997            User Waypoint   N42 25.862 W71 06.473   34 m                            Symbol & Name   Unknown Waypoint                                        16/11/2001 23:03:38             \r
-Waypoint       BEAR HILL       BEAR HILL TOWER User Waypoint   N42 27.941 W71 06.442   88 m                            Symbol & Name   Unknown Tall Tower                                      02/06/2001 03:27:03             \r
-Waypoint       BELLEVUE                User Waypoint   N42 25.857 W71 06.458   23 m                            Symbol & Name   Unknown Parking Area                                    02/06/2001 00:18:15             \r
-Waypoint       DARKHOLLPO      Dark Hollow Pond        User Waypoint   N42 27.511 W71 06.219                                   Symbol & Name   Unknown Fishing Area                                    16/07/2005 20:53:40             \r
-Waypoint       GATE14  Gate 14 User Waypoint   N42 27.072 W71 07.596   111 m                           Symbol & Name   Unknown Truck Stop                                      02/06/2001 03:26:59             \r
-Waypoint       GATE16  Gate 16 User Waypoint   N42 27.510 W71 07.325   78 m                            Symbol & Name   Unknown Truck Stop                                      02/06/2001 03:27:00             \r
-Waypoint       GATE17  Gate 17 User Waypoint   N42 27.563 W71 07.154   66 m                            Symbol & Name   Unknown Truck Stop                                      02/06/2001 03:27:01             \r
-Waypoint       GATE19  Gate 19 User Waypoint   N42 27.981 W71 07.154   57 m                            Symbol & Name   Unknown Truck Stop                                      02/06/2001 03:27:02             \r
-Waypoint       GATE21  Gate 21 User Waypoint   N42 28.119 W71 06.462   49 m                            Symbol & Name   Unknown Truck Stop                                      02/06/2001 03:27:03             \r
-Waypoint       GATE24  Gate 24 User Waypoint   N42 27.403 W71 06.178   81 m                            Symbol & Name   Unknown Truck Stop                                      02/06/2001 03:27:03             \r
-Waypoint       GATE5   Gate 5  User Waypoint   N42 25.851 W71 06.461   22 m                            Symbol & Name   Unknown Truck Stop                                      28/11/2001 21:05:28             \r
-Waypoint       GATE6           User Waypoint   N42 25.874 W71 06.554   27 m                            Symbol & Name   Unknown Waypoint                                        07/11/2001 23:53:41             \r
-Waypoint       PANTHRCAVE              User Waypoint   N42 26.099 W71 06.597   45 m                            Symbol & Name   Unknown Tunnel                                  07/11/2001 23:53:41             \r
-Waypoint       SHEEPFOLD       Sheepfold Parking Lot   User Waypoint   N42 27.205 W71 06.407   70 m                            Symbol & Name   Unknown Parking Area                                    02/06/2001 00:18:13             \r
-Waypoint       SOAPBOX Soap Box Derby Track    User Waypoint   N42 27.357 W71 06.449   64 m                            Symbol & Name   Unknown Cemetery                                        02/06/2001 03:27:04             \r
-\r
-\r
-Header Name    Length  Course  Waypoints       Link\r
-\r
-Route  BELLEVUE        11.2 km 0° true 46 waypoints    \r
-\r
-Header Waypoint Name   Distance        Leg Length      Course\r
-\r
-Route Waypoint BELLEVUE        0 m\r
-Route Waypoint GATE6   136 m   136 m   284° true\r
-Route Waypoint PANTHRCAVE      556 m   420 m   352° true\r
-Route Waypoint 6014MEADOW      891 m   334 m   306° true\r
-Route Waypoint 6006    1.2 km  271 m   338° true\r
-Route Waypoint 6006BLUE        1.2 km  55 m    211° true\r
-Route Waypoint 5096    1.3 km  116 m   288° true\r
-Route Waypoint 5066    1.6 km  257 m   269° true\r
-Route Waypoint 5067    1.6 km  52 m    319° true\r
-Route Waypoint 5058ROAD        1.8 km  133 m   310° true\r
-Route Waypoint 5150TANK        2.0 km  203 m   342° true\r
-Route Waypoint 5142    2.2 km  244 m   353° true\r
-Route Waypoint 5144SUMMIT      2.4 km  175 m   338° true\r
-Route Waypoint 5156    2.6 km  245 m   28° true\r
-Route Waypoint 5148NANEPA      2.9 km  284 m   345° true\r
-Route Waypoint 5258    3.1 km  193 m   14° true\r
-Route Waypoint 5252PURPLE      3.3 km  207 m   12° true\r
-Route Waypoint 527631  3.7 km  367 m   25° true\r
-Route Waypoint 527614  3.7 km  46 m    325° true\r
-Route Waypoint 5267OBSTAC      3.8 km  90 m    351° true\r
-Route Waypoint 5278    3.9 km  103 m   35° true\r
-Route Waypoint 5289    4.1 km  181 m   41° true\r
-Route Waypoint 5374FIRE        4.7 km  563 m   342° true\r
-Route Waypoint 5376    4.8 km  167 m   12° true\r
-Route Waypoint 5376STREAM      4.9 km  30 m    11° true\r
-Route Waypoint 6328    5.4 km  491 m   74° true\r
-Route Waypoint 635722  5.7 km  297 m   104° true\r
-Route Waypoint 635783  5.7 km  55 m    79° true\r
-Route Waypoint 6373    6.1 km  389 m   151° true\r
-Route Waypoint BEAR HILL       6.3 km  245 m   355° true\r
-Route Waypoint 6289    7.0 km  642 m   171° true\r
-Route Waypoint 6297    7.3 km  278 m   162° true\r
-Route Waypoint 6283    7.7 km  420 m   181° true\r
-Route Waypoint 6280    8.0 km  269 m   184° true\r
-Route Waypoint 6177    8.3 km  338 m   190° true\r
-Route Waypoint 6176    8.4 km  81 m    208° true\r
-Route Waypoint 6153    8.8 km  385 m   209° true\r
-Route Waypoint 6171    9.0 km  249 m   122° true\r
-Route Waypoint 6131    9.4 km  428 m   261° true\r
-Route Waypoint 6130    9.5 km  95 m    156° true\r
-Route Waypoint 6029    9.7 km  191 m   255° true\r
-Route Waypoint 6006    10.0 km 321 m   198° true\r
-Route Waypoint 6014MEADOW      10.3 km 271 m   158° true\r
-Route Waypoint PANTHRCAVE      10.6 km 334 m   126° true\r
-Route Waypoint GATE6   11.1 km 420 m   172° true\r
-Route Waypoint BELLEVUE        11.2 km 136 m   104° true\r
-\r
-\r
-Header Name    Start Time      Elapsed Time    Length  Average Speed   Link\r
-\r
-Track  - Trk from .gpx file    25/05/2002 17:06:21     1:59:36 7.7 km  4 kph   \r
-\r
-Header Position        Time    Altitude        Depth   Temperature     Leg Length      Leg Time        Leg Speed       Leg Course\r
-\r
-Trackpoint     N30 03.731 W91 36.621   25/05/2002 17:06:21     1 m     \r
-Trackpoint     N30 03.767 W91 36.634   25/05/2002 17:09:55                             70 m    0:03:34 1.2 kph 343° true\r
-Trackpoint     N30 03.762 W91 36.496   25/05/2002 17:12:00                             222 m   0:02:05 6 kph   92° true\r
-Trackpoint     N30 03.740 W91 36.443   25/05/2002 17:12:48                             94 m    0:00:48 7 kph   116° true\r
-Trackpoint     N30 03.692 W91 36.317   25/05/2002 17:14:41                             221 m   0:01:53 7 kph   114° true\r
-Trackpoint     N30 03.587 W91 35.964   25/05/2002 17:17:16                             599 m   0:02:35 14 kph  109° true\r
-Trackpoint     N30 03.468 W91 35.801   25/05/2002 17:17:46                             342 m   0:00:30 41 kph  130° true\r
-Trackpoint     N30 03.323 W91 35.694   25/05/2002 17:18:20                             319 m   0:00:34 34 kph  147° true\r
-Trackpoint     N30 03.233 W91 35.557   25/05/2002 17:19:01                             276 m   0:00:41 24 kph  127° true\r
-Trackpoint     N30 02.984 W91 35.385   25/05/2002 17:20:46                             538 m   0:01:45 18 kph  149° true\r
-Trackpoint     N30 02.941 W91 35.393   25/05/2002 17:21:10                             81 m    0:00:24 12 kph  189° true\r
-Trackpoint     N30 02.928 W91 35.576   25/05/2002 17:21:51                             295 m   0:00:41 26 kph  265° true\r
-Trackpoint     N30 02.774 W91 35.787   25/05/2002 17:22:35                             443 m   0:00:44 36 kph  230° true\r
-Trackpoint     N30 02.731 W91 35.923   25/05/2002 17:23:08                             233 m   0:00:33 25 kph  250° true\r
-Trackpoint     N30 02.838 W91 36.016   25/05/2002 18:04:23                             248 m   0:41:15 0.4 kph 323° true\r
-Trackpoint     N30 02.820 W91 35.978   25/05/2002 18:06:04     2 m                     70 m    0:01:41 2 kph   119° true\r
-Trackpoint     N30 02.786 W91 35.968   25/05/2002 18:07:06                             65 m    0:01:02 4 kph   166° true\r
-Trackpoint     N30 02.772 W91 35.937   25/05/2002 18:08:18     1 m                     56 m    0:01:12 3 kph   117° true\r
-Trackpoint     N30 02.782 W91 35.864   25/05/2002 18:10:20                             119 m   0:02:02 4 kph   81° true\r
-Trackpoint     N30 02.781 W91 35.830   25/05/2002 18:11:09                             55 m    0:00:49 4 kph   92° true\r
-Trackpoint     N30 02.807 W91 35.780   25/05/2002 18:12:18                             94 m    0:01:09 5 kph   59° true\r
-Trackpoint     N30 02.847 W91 35.712   25/05/2002 18:14:22                             132 m   0:02:04 4 kph   56° true\r
-Trackpoint     N30 02.868 W91 35.686   25/05/2002 18:15:04     2 m                     57 m    0:00:42 5 kph   47° true\r
-Trackpoint     N30 02.895 W91 35.645   25/05/2002 18:16:14     1 m                     83 m    0:01:10 4 kph   53° true\r
-Trackpoint     N30 02.921 W91 35.628   25/05/2002 18:17:01     1 m                     55 m    0:00:47 4 kph   30° true\r
-Trackpoint     N30 02.961 W91 35.631   25/05/2002 18:18:07                             74 m    0:01:06 4 kph   356° true\r
-Trackpoint     N30 03.019 W91 35.639   25/05/2002 18:19:51     2 m                     108 m   0:01:44 4 kph   353° true\r
-Trackpoint     N30 03.047 W91 35.647   25/05/2002 18:20:39                             53 m    0:00:48 4 kph   346° true\r
-Trackpoint     N30 03.074 W91 35.662   25/05/2002 18:21:24                             56 m    0:00:45 4 kph   334° true\r
-Trackpoint     N30 03.108 W91 35.662   25/05/2002 18:22:17                             63 m    0:00:53 4 kph   360° true\r
-Trackpoint     N30 03.133 W91 35.680   25/05/2002 18:23:18                             55 m    0:01:01 3 kph   328° true\r
-Trackpoint     N30 03.181 W91 35.681   25/05/2002 18:24:37                             89 m    0:01:19 4 kph   359° true\r
-Trackpoint     N30 03.292 W91 35.712   25/05/2002 18:28:13     6 m                     212 m   0:03:36 4 kph   346° true\r
-Trackpoint     N30 03.224 W91 35.696   25/05/2002 18:31:36     2 m                     129 m   0:03:23 2 kph   168° true\r
-Trackpoint     N30 03.191 W91 35.687   25/05/2002 18:32:56                             63 m    0:01:20 3 kph   167° true\r
-Trackpoint     N30 03.158 W91 35.690   25/05/2002 18:34:02                             61 m    0:01:06 3 kph   184° true\r
-Trackpoint     N30 03.147 W91 35.726   25/05/2002 18:36:03                             61 m    0:02:01 2 kph   251° true\r
-Trackpoint     N30 03.149 W91 35.758   25/05/2002 18:36:48                             52 m    0:00:45 4 kph   274° true\r
-Trackpoint     N30 03.159 W91 35.807   25/05/2002 18:37:52     1 m                     81 m    0:01:04 5 kph   283° true\r
-Trackpoint     N30 03.188 W91 35.871   25/05/2002 18:39:18                             116 m   0:01:26 5 kph   298° true\r
-Trackpoint     N30 03.217 W91 35.878   25/05/2002 18:40:15                             55 m    0:00:57 3 kph   348° true\r
-Trackpoint     N30 03.238 W91 35.866   25/05/2002 18:41:25     6 m                     43 m    0:01:10 2 kph   26° true\r
-Trackpoint     N30 03.217 W91 35.885   25/05/2002 18:42:37                             49 m    0:01:12 2 kph   218° true\r
-Trackpoint     N30 03.192 W91 35.875   25/05/2002 18:44:01                             49 m    0:01:24 2 kph   161° true\r
-Trackpoint     N30 03.169 W91 35.851   25/05/2002 18:45:53                             57 m    0:01:52 2 kph   138° true\r
-Trackpoint     N30 03.154 W91 35.816   25/05/2002 18:46:54                             63 m    0:01:01 4 kph   116° true\r
-Trackpoint     N30 03.140 W91 35.786   25/05/2002 18:47:42                             55 m    0:00:48 4 kph   118° true\r
-Trackpoint     N30 03.135 W91 35.741   25/05/2002 18:48:41                             73 m    0:00:59 4 kph   97° true\r
-Trackpoint     N30 03.133 W91 35.701   25/05/2002 18:49:52                             64 m    0:01:11 3 kph   93° true\r
-Trackpoint     N30 03.113 W91 35.682   25/05/2002 18:50:49                             48 m    0:00:57 3 kph   141° true\r
-Trackpoint     N30 03.063 W91 35.664   25/05/2002 18:52:14                             97 m    0:01:25 4 kph   163° true\r
-Trackpoint     N30 03.034 W91 35.654   25/05/2002 18:52:56                             56 m    0:00:42 5 kph   163° true\r
-Trackpoint     N30 03.011 W91 35.646   25/05/2002 18:53:38                             45 m    0:00:42 4 kph   163° true\r
-Trackpoint     N30 02.946 W91 35.623   25/05/2002 18:55:11                             126 m   0:01:33 5 kph   163° true\r
-Trackpoint     N30 02.907 W91 35.655   25/05/2002 18:56:32                             89 m    0:01:21 4 kph   215° true\r
-Trackpoint     N30 02.885 W91 35.685   25/05/2002 18:57:24                             63 m    0:00:52 4 kph   230° true\r
-Trackpoint     N30 02.850 W91 35.727   25/05/2002 18:58:40     7 m                     94 m    0:01:16 4 kph   226° true\r
-Trackpoint     N30 02.824 W91 35.760   25/05/2002 18:59:28                             72 m    0:00:48 5 kph   228° true\r
-Trackpoint     N30 02.798 W91 35.796   25/05/2002 19:00:22                             75 m    0:00:54 5 kph   230° true\r
-Trackpoint     N30 02.784 W91 35.859   25/05/2002 19:01:41                             105 m   0:01:19 5 kph   256° true\r
-Trackpoint     N30 02.774 W91 35.908   25/05/2002 19:02:48                             81 m    0:01:07 4 kph   257° true\r
-Trackpoint     N30 02.779 W91 35.938   25/05/2002 19:03:43                             49 m    0:00:55 3 kph   281° true\r
-Trackpoint     N30 02.807 W91 35.957   25/05/2002 19:04:49                             60 m    0:01:06 3 kph   330° true\r
-Trackpoint     N30 02.828 W91 35.980   25/05/2002 19:05:57                             54 m    0:01:08 3 kph   317° true\r
diff --git a/reference/expertgps.g7t b/reference/expertgps.g7t
deleted file mode 100644 (file)
index 8c2d12c..0000000
+++ /dev/null
@@ -1,1145 +0,0 @@
-Version 2:G7T\r
-#Sat Apr 14 21:27:12 2007 GMT\r
-#Sinnotts Radius=6371.0 km\r
-D WGS-72\r
-M UTM\r
-Z 0.000000\r
-A Feet ->Altitude/Depth units for this file\r
-#Velocity units Statute miles per hour\r
-C Category 1,Category 2,Category 3,Category 4,Category 5,Category 6,Category 7,Category 8,Category 9,Category 10,Category 11,Category 12,Category 13,Category 14,Category 15,Category 16\r
-\r
-W  5058ROAD        19T  325561.6  4700804.1 Sat Jun 02 00:18:14 2001 ROAD CROSSING                                     ^   18^Black       ^S+N^0\r
-cA    5058ROAD|||||\r
-cB    |||0|0|1.0e25\r
-cC    177.000001|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|3789.415 S mi\r
-cD    1.0e25|1.0e25|0\r
-\r
-W  5058ROAD        19T  325561.6  4700804.1 Sat Jun 02 00:18:14 2001 ROAD CROSSING                                     ^   18^Black       ^S+N^0\r
-cA    5058ROAD|||||\r
-cB    |||0|0|1.0e25\r
-cC    177.000001|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|3789.415 S mi\r
-cD    1.0e25|1.0e25|0\r
-\r
-W  5066            19T  325694.0  4700676.9 Wed Nov 28 21:05:28 2001 5066                                              ^ 8238^Black       ^S+N^0\r
-cA    5066|||||\r
-cB    |||0|0|1.0e25\r
-cC    146.281325|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|3789.400 S mi\r
-cD    1.0e25|1.0e25|0\r
-\r
-W  5066            19T  325694.0  4700676.9 Wed Nov 28 21:05:28 2001                                                   ^ 8238^Black       ^S+N^0\r
-cA    5066|||||\r
-cB    |||0|0|1.0e25\r
-cC    146.281325|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|3789.400 S mi\r
-cD    1.0e25|1.0e25|0\r
-\r
-W  5067            19T  325661.1  4700716.5 Sat Jun 02 03:26:55 2001                                                   ^   18^Black       ^S+N^0\r
-cA    5067|||||\r
-cB    |||0|0|1.0e25\r
-cC    189.000002|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|3789.400 S mi\r
-cD    1.0e25|1.0e25|0\r
-\r
-W  5067            19T  325661.1  4700716.5 Sat Jun 02 03:26:55 2001 5067                                              ^   18^Black       ^S+N^0\r
-cA    5067|||||\r
-cB    |||0|0|1.0e25\r
-cC    189.000002|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|3789.400 S mi\r
-cD    1.0e25|1.0e25|0\r
-\r
-W  5096            19T  325951.7  4700674.8 Fri Nov 16 23:03:38 2001 5096                                              ^   18^Black       ^S+N^0\r
-cA    5096|||||\r
-cB    |||0|0|1.0e25\r
-cC    147.069896|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|3789.276 S mi\r
-cD    1.0e25|1.0e25|0\r
-\r
-W  5096            19T  325951.7  4700674.8 Fri Nov 16 23:03:38 2001                                                   ^   18^Black       ^S+N^0\r
-cA    5096|||||\r
-cB    |||0|0|1.0e25\r
-cC    147.069896|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|3789.276 S mi\r
-cD    1.0e25|1.0e25|0\r
-\r
-W  5142            19T  325480.4  4701240.7 Wed Nov 28 21:05:28 2001                                                   ^   18^Black       ^S+N^0\r
-cA    5142|||||\r
-cB    |||0|0|1.0e25\r
-cC    165.993197|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|3789.285 S mi\r
-cD    1.0e25|1.0e25|0\r
-\r
-W  5142            19T  325480.4  4701240.7 Wed Nov 28 21:05:28 2001 5142                                              ^   18^Black       ^S+N^0\r
-cA    5142|||||\r
-cB    |||0|0|1.0e25\r
-cC    165.993197|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|3789.285 S mi\r
-cD    1.0e25|1.0e25|0\r
-\r
-W  5144SUMMIT      19T  325418.6  4701403.9 Wed Nov 28 21:05:28 2001                                                   ^ 8246^Black       ^S+N^0\r
-cA    5144SUMMIT|||||\r
-cB    |||0|0|1.0e25\r
-cC    202.263459|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|3789.252 S mi\r
-cD    1.0e25|1.0e25|0\r
-\r
-W  5144SUMMIT      19T  325418.6  4701403.9 Wed Nov 28 21:05:28 2001 Summit                                            ^ 8246^Black       ^S+N^0\r
-cA    5144SUMMIT|||||\r
-cB    |||0|0|1.0e25\r
-cC    202.263459|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|3789.252 S mi\r
-cD    1.0e25|1.0e25|0\r
-\r
-W  5148NANEPA      19T  325474.0  4701892.1 Wed Nov 07 23:53:41 2001 Nanepashemet Road Crossing                        ^   18^Black       ^S+N^0\r
-cA    5148NANEPA|||||\r
-cB    |||0|0|1.0e25\r
-cC    393.074416|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|3789.036 S mi\r
-cD    1.0e25|1.0e25|0\r
-\r
-W  5148NANEPA      19T  325474.0  4701892.1 Wed Nov 07 23:53:41 2001                                                   ^   18^Black       ^S+N^0\r
-cA    5148NANEPA|||||\r
-cB    |||0|0|1.0e25\r
-cC    393.074416|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|3789.036 S mi\r
-cD    1.0e25|1.0e25|0\r
-\r
-W  5150TANK        19T  325504.6  4700998.2 Sat Jun 02 00:18:16 2001 WATER TANK                                        ^ 8211^Black       ^S+N^0\r
-cA    5150TANK|||||\r
-cB    |||0|0|1.0e25\r
-cC    221.000006|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|3789.367 S mi\r
-cD    1.0e25|1.0e25|0\r
-\r
-W  5150TANK        19T  325504.6  4700998.2 Sat Jun 02 00:18:16 2001 WATER TANK                                        ^ 8211^Black       ^S+N^0\r
-cA    5150TANK|||||\r
-cB    |||0|0|1.0e25\r
-cC    221.000006|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|3789.367 S mi\r
-cD    1.0e25|1.0e25|0\r
-\r
-W  5156            19T  325538.9  4701616.4 Sat Jun 02 03:26:58 2001                                                   ^   18^Black       ^S+N^0\r
-cA    5156|||||\r
-cB    |||0|0|1.0e25\r
-cC    418.999990|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|3789.111 S mi\r
-cD    1.0e25|1.0e25|0\r
-\r
-W  5156            19T  325538.9  4701616.4 Sat Jun 02 03:26:58 2001 5156                                              ^   18^Black       ^S+N^0\r
-cA    5156|||||\r
-cB    |||0|0|1.0e25\r
-cC    418.999990|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|3789.111 S mi\r
-cD    1.0e25|1.0e25|0\r
-\r
-W  5179DEAD        19T  325722.8  4701897.1 Sat Jun 02 03:26:59 2001 Dead End                                          ^  166^Black       ^S+N^0\r
-cA    5179DEAD|||||\r
-cB    |||0|0|1.0e25\r
-cC    383.999992|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|3788.913 S mi\r
-cD    1.0e25|1.0e25|0\r
-\r
-W  5224            19T  325260.1  4702465.0 Sat Jun 02 03:26:59 2001 5224                                              ^   18^Black       ^S+N^0\r
-cA    5224|||||\r
-cB    |||0|0|1.0e25\r
-cC    317.999997|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|3788.918 S mi\r
-cD    1.0e25|1.0e25|0\r
-\r
-W  5229            19T  325280.5  4702931.9 Sat Jun 02 03:26:59 2001 5229                                              ^   18^Black       ^S+N^0\r
-cA    5229|||||\r
-cB    |||0|0|1.0e25\r
-cC    270.999999|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|3788.727 S mi\r
-cD    1.0e25|1.0e25|0\r
-\r
-W  5236BRIDGE      19T  325300.9  4702641.4 Sat Jun 02 03:26:59 2001 Bridge                                            ^ 8233^Black       ^S+N^0\r
-cA    5236BRIDGE|||||\r
-cB    |||0|0|1.0e25\r
-cC    295.000001|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|3788.830 S mi\r
-cD    1.0e25|1.0e25|0\r
-\r
-W  5237            19T  325316.9  4702697.6 Sat Jun 02 03:26:59 2001 5237                                              ^   18^Black       ^S+N^0\r
-cA    5237|||||\r
-cB    |||0|0|1.0e25\r
-cC    272.000005|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|3788.800 S mi\r
-cD    1.0e25|1.0e25|0\r
-\r
-W  5239ROAD        19T  325315.1  4702953.1 Sat Jun 02 03:27:00 2001 Road                                              ^  176^Black       ^S+N^0\r
-cA    5239ROAD|||||\r
-cB    |||0|0|1.0e25\r
-cC    265.999992|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|3788.702 S mi\r
-cD    1.0e25|1.0e25|0\r
-\r
-W  5252PURPLE      19T  325574.9  4702277.5 Wed Nov 07 23:53:41 2001                                                   ^ 8246^Black       ^S+N^0\r
-cA    5252PURPLE|||||\r
-cB    |||0|0|1.0e25\r
-cC    255.879480|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|3788.838 S mi\r
-cD    1.0e25|1.0e25|0\r
-\r
-W  5252PURPLE      19T  325574.9  4702277.5 Wed Nov 07 23:53:41 2001 Purple Rock Hill                                  ^ 8246^Black       ^S+N^0\r
-cA    5252PURPLE|||||\r
-cB    |||0|0|1.0e25\r
-cC    255.879480|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|3788.838 S mi\r
-cD    1.0e25|1.0e25|0\r
-\r
-W  5254            19T  325596.2  4702404.2 Wed Nov 28 21:05:28 2001 5254                                              ^   18^Black       ^S+N^0\r
-cA    5254|||||\r
-cB    |||0|0|1.0e25\r
-cC    218.821047|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|3788.778 S mi\r
-cD    1.0e25|1.0e25|0\r
-\r
-W  5258            19T  325525.9  4702077.2 Wed Nov 07 23:53:41 2001 5258                                              ^   18^Black       ^S+N^0\r
-cA    5258|||||\r
-cB    |||0|0|1.0e25\r
-cC    244.840687|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|3788.939 S mi\r
-cD    1.0e25|1.0e25|0\r
-\r
-W  5258            19T  325525.9  4702077.2 Wed Nov 07 23:53:41 2001                                                   ^   18^Black       ^S+N^0\r
-cA    5258|||||\r
-cB    |||0|0|1.0e25\r
-cC    244.840687|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|3788.939 S mi\r
-cD    1.0e25|1.0e25|0\r
-\r
-W  5264            19T  325623.4  4702403.8 Wed Nov 28 21:05:28 2001 5264                                              ^   18^Black       ^S+N^0\r
-cA    5264|||||\r
-cB    |||0|0|1.0e25\r
-cC    214.090422|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|3788.765 S mi\r
-cD    1.0e25|1.0e25|0\r
-\r
-W  526708          19T  325601.0  4702777.4 Sat Jun 02 03:27:00 2001 526708                                            ^   18^Black       ^S+N^0\r
-cA    526708|||||\r
-cB    |||0|0|1.0e25\r
-cC    253.999990|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|3788.632 S mi\r
-cD    1.0e25|1.0e25|0\r
-\r
-W  526750          19T  325659.4  4702701.3 Sat Jun 02 03:27:00 2001 526750                                            ^   18^Black       ^S+N^0\r
-cA    526750|||||\r
-cB    |||0|0|1.0e25\r
-cC    245.000008|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|3788.633 S mi\r
-cD    1.0e25|1.0e25|0\r
-\r
-W  5267OBSTAC      19T  325698.7  4702733.5 Sat Jun 02 03:27:00 2001 Obstacle                                          ^ 8204^Black       ^S+N^0\r
-cA    5267OBSTAC|||||\r
-cB    |||0|0|1.0e25\r
-cC    241.999989|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|3788.601 S mi\r
-cD    1.0e25|1.0e25|0\r
-\r
-W  5267OBSTAC      19T  325698.7  4702733.5 Sat Jun 02 03:27:00 2001                                                   ^ 8204^Black       ^S+N^0\r
-cA    5267OBSTAC|||||\r
-cB    |||0|0|1.0e25\r
-cC    241.999989|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|3788.601 S mi\r
-cD    1.0e25|1.0e25|0\r
-\r
-W  527614          19T  325710.4  4702644.8 Wed Nov 07 23:53:41 2001                                                   ^   18^Black       ^S+N^0\r
-cA    527614|||||\r
-cB    |||0|0|1.0e25\r
-cC    258.245193|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|3788.630 S mi\r
-cD    1.0e25|1.0e25|0\r
-\r
-W  527614          19T  325710.4  4702644.8 Wed Nov 07 23:53:41 2001 527614                                            ^   18^Black       ^S+N^0\r
-cA    527614|||||\r
-cB    |||0|0|1.0e25\r
-cC    258.245193|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|3788.630 S mi\r
-cD    1.0e25|1.0e25|0\r
-\r
-W  527631          19T  325735.7  4702606.4 Wed Nov 07 23:53:41 2001                                                   ^   18^Black       ^S+N^0\r
-cA    527631|||||\r
-cB    |||0|0|1.0e25\r
-cC    258.245193|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|3788.632 S mi\r
-cD    1.0e25|1.0e25|0\r
-\r
-W  527631          19T  325735.7  4702606.4 Wed Nov 07 23:53:41 2001 527631                                            ^   18^Black       ^S+N^0\r
-cA    527631|||||\r
-cB    |||0|0|1.0e25\r
-cC    258.245193|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|3788.632 S mi\r
-cD    1.0e25|1.0e25|0\r
-\r
-W  5278            19T  325759.2  4702816.5 Sat Jun 02 03:27:00 2001                                                   ^   18^Black       ^S+N^0\r
-cA    5278|||||\r
-cB    |||0|0|1.0e25\r
-cC    224.000000|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|3788.540 S mi\r
-cD    1.0e25|1.0e25|0\r
-\r
-W  5278            19T  325759.2  4702816.5 Sat Jun 02 03:27:00 2001 5278                                              ^   18^Black       ^S+N^0\r
-cA    5278|||||\r
-cB    |||0|0|1.0e25\r
-cC    224.000000|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|3788.540 S mi\r
-cD    1.0e25|1.0e25|0\r
-\r
-W  5278ROAD        19T  325772.8  4702886.6 Sat Jun 02 03:27:01 2001 Road                                              ^  176^Black       ^S+N^0\r
-cA    5278ROAD|||||\r
-cB    |||0|0|1.0e25\r
-cC    221.000006|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|3788.506 S mi\r
-cD    1.0e25|1.0e25|0\r
-\r
-W  5287WATER       19T  325894.0  4702767.1 Sat Jun 02 03:27:01 2001 Reservoir                                         ^  163^Black       ^S+N^0\r
-cA    5287WATER|||||\r
-cB    |||0|0|1.0e25\r
-cC    222.999993|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|3788.493 S mi\r
-cD    1.0e25|1.0e25|0\r
-\r
-W  5289            19T  325881.1  4702950.0 Sat Jun 02 03:27:01 2001 5289                                              ^   18^Black       ^S+N^0\r
-cA    5289|||||\r
-cB    |||0|0|1.0e25\r
-cC    210.000011|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|3788.429 S mi\r
-cD    1.0e25|1.0e25|0\r
-\r
-W  5289            19T  325881.1  4702950.0 Sat Jun 02 03:27:01 2001                                                   ^   18^Black       ^S+N^0\r
-cA    5289|||||\r
-cB    |||0|0|1.0e25\r
-cC    210.000011|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|3788.429 S mi\r
-cD    1.0e25|1.0e25|0\r
-\r
-W  5299DEAD        19T  325978.0  4702975.6 Sat Jun 02 03:27:01 2001 Dead End                                          ^  166^Black       ^S+N^0\r
-cA    5299DEAD|||||\r
-cB    |||0|0|1.0e25\r
-cC    228.000000|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|3788.372 S mi\r
-cD    1.0e25|1.0e25|0\r
-\r
-W  5374FIRE        19T  325718.9  4703488.0 Wed Nov 28 21:05:28 2001 5374FIRE                                          ^   18^Black       ^S+N^0\r
-cA    5374FIRE|||||\r
-cB    |||0|0|1.0e25\r
-cC    173.877706|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|3788.299 S mi\r
-cD    1.0e25|1.0e25|0\r
-\r
-W  5374FIRE        19T  325718.9  4703488.0 Wed Nov 28 21:05:28 2001                                                   ^   18^Black       ^S+N^0\r
-cA    5374FIRE|||||\r
-cB    |||0|0|1.0e25\r
-cC    173.877706|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|3788.299 S mi\r
-cD    1.0e25|1.0e25|0\r
-\r
-W  5376            19T  325758.3  4703650.1 Sat Jun 02 03:27:02 2001 5376                                              ^   18^Black       ^S+N^0\r
-cA    5376|||||\r
-cB    |||0|0|1.0e25\r
-cC    185.000002|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|3788.217 S mi\r
-cD    1.0e25|1.0e25|0\r
-\r
-W  5376            19T  325758.3  4703650.1 Sat Jun 02 03:27:02 2001                                                   ^   18^Black       ^S+N^0\r
-cA    5376|||||\r
-cB    |||0|0|1.0e25\r
-cC    185.000002|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|3788.217 S mi\r
-cD    1.0e25|1.0e25|0\r
-\r
-W  5376BRIDGE      19T  325724.4  4703663.0 Sat Jun 02 03:27:01 2001 Bridge                                            ^ 8233^Black       ^S+N^0\r
-cA    5376BRIDGE|||||\r
-cB    |||0|0|1.0e25\r
-cC    181.999995|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|3788.229 S mi\r
-cD    1.0e25|1.0e25|0\r
-\r
-W  5376DEAD        19T  325778.5  4703631.2 Sat Jun 02 03:27:02 2001 Dead End                                          ^  166^Black       ^S+N^0\r
-cA    5376DEAD|||||\r
-cB    |||0|0|1.0e25\r
-cC    187.000002|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|3788.215 S mi\r
-cD    1.0e25|1.0e25|0\r
-\r
-W  5376STREAM      19T  325764.8  4703679.1 Wed Nov 07 23:53:41 2001 Stream Crossing                                   ^ 8233^Black       ^S+N^0\r
-cA    5376STREAM|||||\r
-cB    |||0|0|1.0e25\r
-cC    211.724709|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|3788.203 S mi\r
-cD    1.0e25|1.0e25|0\r
-\r
-W  5376STREAM      19T  325764.8  4703679.1 Wed Nov 07 23:53:41 2001                                                   ^ 8233^Black       ^S+N^0\r
-cA    5376STREAM|||||\r
-cB    |||0|0|1.0e25\r
-cC    211.724709|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|3788.203 S mi\r
-cD    1.0e25|1.0e25|0\r
-\r
-W  6006            19T  326091.0  4700682.6 Sat Jun 02 03:26:55 2001                                                   ^   18^Black       ^S+N^0\r
-cA    6006|||||\r
-cB    |||0|0|1.0e25\r
-cC    185.000002|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|3789.205 S mi\r
-cD    1.0e25|1.0e25|0\r
-\r
-W  6006            19T  326091.0  4700682.6 Sat Jun 02 03:26:55 2001                                                   ^   18^Black       ^S+N^0\r
-cA    6006|||||\r
-cB    |||0|0|1.0e25\r
-cC    185.000002|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|3789.205 S mi\r
-cD    1.0e25|1.0e25|0\r
-\r
-W  6006            19T  326091.0  4700682.6 Sat Jun 02 03:26:55 2001 600698                                            ^   18^Black       ^S+N^0\r
-cA    6006|||||\r
-cB    |||0|0|1.0e25\r
-cC    185.000002|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|3789.205 S mi\r
-cD    1.0e25|1.0e25|0\r
-\r
-W  6006BLUE        19T  326061.3  4700636.2 Wed Nov 28 21:05:28 2001                                                   ^   18^Black       ^S+N^0\r
-cA    6006BLUE|||||\r
-cB    |||0|0|1.0e25\r
-cC    151.012351|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|3789.237 S mi\r
-cD    1.0e25|1.0e25|0\r
-\r
-W  6006BLUE        19T  326061.3  4700636.2 Wed Nov 28 21:05:28 2001 6006BLUE                                          ^   18^Black       ^S+N^0\r
-cA    6006BLUE|||||\r
-cB    |||0|0|1.0e25\r
-cC    151.012351|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|3789.237 S mi\r
-cD    1.0e25|1.0e25|0\r
-\r
-W  6014MEADOW      19T  326186.1  4700429.0 Wed Nov 28 21:05:28 2001 6014MEADOW                                        ^   18^Black       ^S+N^0\r
-cA    6014MEADOW|||||\r
-cB    |||0|0|1.0e25\r
-cC    123.415169|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|3789.257 S mi\r
-cD    1.0e25|1.0e25|0\r
-\r
-W  6014MEADOW      19T  326186.1  4700429.0 Wed Nov 28 21:05:28 2001                                                   ^   18^Black       ^S+N^0\r
-cA    6014MEADOW|||||\r
-cB    |||0|0|1.0e25\r
-cC    123.415169|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|3789.257 S mi\r
-cD    1.0e25|1.0e25|0\r
-\r
-W  6014MEADOW      19T  326186.1  4700429.0 Wed Nov 28 21:05:28 2001                                                   ^   18^Black       ^S+N^0\r
-cA    6014MEADOW|||||\r
-cB    |||0|0|1.0e25\r
-cC    123.415169|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|3789.257 S mi\r
-cD    1.0e25|1.0e25|0\r
-\r
-W  6016            19T  326121.0  4700642.7 Wed Nov 28 21:05:28 2001 Bike Loop Connector                               ^   18^Black       ^S+N^0\r
-cA    6016|||||\r
-cB    |||0|0|1.0e25\r
-cC    142.338470|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|3789.206 S mi\r
-cD    1.0e25|1.0e25|0\r
-\r
-W  6029            19T  326200.2  4700983.9 Sat Jun 02 03:26:55 2001 6029                                              ^   18^Black       ^S+N^0\r
-cA    6029|||||\r
-cB    |||0|0|1.0e25\r
-cC    185.000002|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|3789.035 S mi\r
-cD    1.0e25|1.0e25|0\r
-\r
-W  6029            19T  326200.2  4700983.9 Sat Jun 02 03:26:55 2001                                                   ^   18^Black       ^S+N^0\r
-cA    6029|||||\r
-cB    |||0|0|1.0e25\r
-cC    185.000002|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|3789.035 S mi\r
-cD    1.0e25|1.0e25|0\r
-\r
-W  6042CROSS       19T  326475.3  4700279.0 Sat Jun 02 03:27:05 2001 Crossing                                          ^ 8238^Black       ^S+N^0\r
-cA    6042CROSS|||||\r
-cB    |||0|0|1.0e25\r
-cC    148.000004|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|3789.175 S mi\r
-cD    1.0e25|1.0e25|0\r
-\r
-W  6053            19T  326525.9  4700363.4 Sat Jun 02 03:27:05 2001 6053                                              ^   18^Black       ^S+N^0\r
-cA    6053|||||\r
-cB    |||0|0|1.0e25\r
-cC    164.999999|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|3789.118 S mi\r
-cD    1.0e25|1.0e25|0\r
-\r
-W  6066            19T  326663.7  4700694.1 Sat Jun 02 03:26:57 2001 6066                                              ^   18^Black       ^S+N^0\r
-cA    6066|||||\r
-cB    |||0|0|1.0e25\r
-cC    84.000003|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|3788.923 S mi\r
-cD    1.0e25|1.0e25|0\r
-\r
-W  6067            19T  326658.4  4700751.4 Sat Jun 02 03:26:57 2001 6067                                              ^   18^Black       ^S+N^0\r
-cA    6067|||||\r
-cB    |||0|0|1.0e25\r
-cC    113.000006|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|3788.903 S mi\r
-cD    1.0e25|1.0e25|0\r
-\r
-W  6071            19T  326785.1  4700192.9 Sat Jun 02 03:26:57 2001 6071                                              ^   18^Black       ^S+N^0\r
-cA    6071|||||\r
-cB    |||0|0|1.0e25\r
-cC    99.999998|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|3789.058 S mi\r
-cD    1.0e25|1.0e25|0\r
-\r
-W  6073            19T  326721.5  4700032.0 Sat Jun 02 03:26:56 2001 6073                                              ^   18^Black       ^S+N^0\r
-cA    6073|||||\r
-cB    |||0|0|1.0e25\r
-cC    49.999999|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|3789.151 S mi\r
-cD    1.0e25|1.0e25|0\r
-\r
-W  6077LOGS        19T  326742.1  4700720.2 Sat Jun 02 00:18:16 2001 Log Crossing                                      ^ 8204^Black       ^S+N^0\r
-cA    6077LOGS|||||\r
-cB    |||0|0|1.0e25\r
-cC    105.000005|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|3788.875 S mi\r
-cD    1.0e25|1.0e25|0\r
-\r
-W  6084            19T  326882.9  4700476.2 Sat Jun 02 03:26:57 2001 6084                                              ^   18^Black       ^S+N^0\r
-cA    6084|||||\r
-cB    |||0|0|1.0e25\r
-cC    124.000001|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|3788.901 S mi\r
-cD    1.0e25|1.0e25|0\r
-\r
-W  6121DEAD        19T  326248.8  4701133.2 Sat Jun 02 03:26:57 2001 Dead End                                          ^  166^Black       ^S+N^0\r
-cA    6121DEAD|||||\r
-cB    |||0|0|1.0e25\r
-cC    183.999995|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|3788.954 S mi\r
-cD    1.0e25|1.0e25|0\r
-\r
-W  6130            19T  326386.1  4701028.3 Sat Jun 02 03:26:55 2001 6130                                              ^   18^Black       ^S+N^0\r
-cA    6130|||||\r
-cB    |||0|0|1.0e25\r
-cC    210.000011|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|3788.928 S mi\r
-cD    1.0e25|1.0e25|0\r
-\r
-W  6130            19T  326386.1  4701028.3 Sat Jun 02 03:26:55 2001                                                   ^   18^Black       ^S+N^0\r
-cA    6130|||||\r
-cB    |||0|0|1.0e25\r
-cC    210.000011|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|3788.928 S mi\r
-cD    1.0e25|1.0e25|0\r
-\r
-W  6131            19T  326349.9  4701116.5 Sat Jun 02 03:26:58 2001                                                   ^   18^Black       ^S+N^0\r
-cA    6131|||||\r
-cB    |||0|0|1.0e25\r
-cC    210.000011|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|3788.911 S mi\r
-cD    1.0e25|1.0e25|0\r
-\r
-W  6131            19T  326349.9  4701116.5 Sat Jun 02 03:26:58 2001 6131                                              ^   18^Black       ^S+N^0\r
-cA    6131|||||\r
-cB    |||0|0|1.0e25\r
-cC    210.000011|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|3788.911 S mi\r
-cD    1.0e25|1.0e25|0\r
-\r
-W  6153            19T  326565.3  4701310.2 Sat Jun 02 03:27:05 2001 6153                                              ^   18^Black       ^S+N^0\r
-cA    6153|||||\r
-cB    |||0|0|1.0e25\r
-cC    205.999998|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|3788.732 S mi\r
-cD    1.0e25|1.0e25|0\r
-\r
-W  6153            19T  326565.3  4701310.2 Sat Jun 02 03:27:05 2001                                                   ^   18^Black       ^S+N^0\r
-cA    6153|||||\r
-cB    |||0|0|1.0e25\r
-cC    205.999998|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|3788.732 S mi\r
-cD    1.0e25|1.0e25|0\r
-\r
-W  6155DEAD        19T  326579.0  4701534.3 Sat Jun 02 03:27:04 2001 Dead End                                          ^  166^Black       ^S+N^0\r
-cA    6155DEAD|||||\r
-cB    |||0|0|1.0e25\r
-cC    201.000003|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|3788.638 S mi\r
-cD    1.0e25|1.0e25|0\r
-\r
-W  6171            19T  326774.3  4701173.8 Sat Jun 02 03:27:05 2001 6171                                              ^   18^Black       ^S+N^0\r
-cA    6171|||||\r
-cB    |||0|0|1.0e25\r
-cC    181.999995|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|3788.683 S mi\r
-cD    1.0e25|1.0e25|0\r
-\r
-W  6171            19T  326774.3  4701173.8 Sat Jun 02 03:27:05 2001                                                   ^   18^Black       ^S+N^0\r
-cA    6171|||||\r
-cB    |||0|0|1.0e25\r
-cC    181.999995|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|3788.683 S mi\r
-cD    1.0e25|1.0e25|0\r
-\r
-W  6176            19T  326759.4  4701642.2 Sat Jun 02 03:27:04 2001                                                   ^   18^Black       ^S+N^0\r
-cA    6176|||||\r
-cB    |||0|0|1.0e25\r
-cC    205.000004|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|3788.509 S mi\r
-cD    1.0e25|1.0e25|0\r
-\r
-W  6176            19T  326759.4  4701642.2 Sat Jun 02 03:27:04 2001 6176                                              ^   18^Black       ^S+N^0\r
-cA    6176|||||\r
-cB    |||0|0|1.0e25\r
-cC    205.000004|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|3788.509 S mi\r
-cD    1.0e25|1.0e25|0\r
-\r
-W  6177            19T  326799.5  4701712.8 Sat Jun 02 03:27:04 2001 6177                                              ^   18^Black       ^S+N^0\r
-cA    6177|||||\r
-cB    |||0|0|1.0e25\r
-cC    203.999997|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|3788.462 S mi\r
-cD    1.0e25|1.0e25|0\r
-\r
-W  6177            19T  326799.5  4701712.8 Sat Jun 02 03:27:04 2001                                                   ^   18^Black       ^S+N^0\r
-cA    6177|||||\r
-cB    |||0|0|1.0e25\r
-cC    203.999997|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|3788.462 S mi\r
-cD    1.0e25|1.0e25|0\r
-\r
-W  6181CROSS       19T  326807.5  4701106.4 Sat Jun 02 03:27:05 2001 Crossing                                          ^ 8238^Black       ^S+N^0\r
-cA    6181CROSS|||||\r
-cB    |||0|0|1.0e25\r
-cC    173.000000|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|3788.693 S mi\r
-cD    1.0e25|1.0e25|0\r
-\r
-W  6272            19T  326723.2  4702268.7 Sat Jun 02 03:26:56 2001 6272                                              ^   18^Black       ^S+N^0\r
-cA    6272|||||\r
-cB    |||0|0|1.0e25\r
-cC    240.000001|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|3788.284 S mi\r
-cD    1.0e25|1.0e25|0\r
-\r
-W  6272            19T  326761.8  4702265.6 Sat Jun 02 03:26:55 2001 6272                                              ^   18^Black       ^S+N^0\r
-cA    6272|||||\r
-cB    |||0|0|1.0e25\r
-cC    229.000006|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|3788.267 S mi\r
-cD    1.0e25|1.0e25|0\r
-\r
-W  6278            19T  326776.2  4702807.8 Sat Jun 02 03:27:04 2001 6278                                              ^   18^Black       ^S+N^0\r
-cA    6278|||||\r
-cB    |||0|0|1.0e25\r
-cC    229.999988|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|3788.050 S mi\r
-cD    1.0e25|1.0e25|0\r
-\r
-W  6280            19T  326869.0  4702042.4 Fri Nov 16 23:03:38 2001 6280                                              ^   18^Black       ^S+N^0\r
-cA    6280|||||\r
-cB    |||0|0|1.0e25\r
-cC    188.858953|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|3788.301 S mi\r
-cD    1.0e25|1.0e25|0\r
-\r
-W  6280            19T  326869.0  4702042.4 Fri Nov 16 23:03:38 2001                                                   ^   18^Black       ^S+N^0\r
-cA    6280|||||\r
-cB    |||0|0|1.0e25\r
-cC    188.858953|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|3788.301 S mi\r
-cD    1.0e25|1.0e25|0\r
-\r
-W  6283            19T  326892.6  4702310.1 Fri Nov 16 23:03:38 2001 6283                                              ^   18^Black       ^S+N^0\r
-cA    6283|||||\r
-cB    |||0|0|1.0e25\r
-cC    218.821047|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|3788.186 S mi\r
-cD    1.0e25|1.0e25|0\r
-\r
-W  6283            19T  326892.6  4702310.1 Fri Nov 16 23:03:38 2001                                                   ^   18^Black       ^S+N^0\r
-cA    6283|||||\r
-cB    |||0|0|1.0e25\r
-cC    218.821047|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|3788.186 S mi\r
-cD    1.0e25|1.0e25|0\r
-\r
-W  6289            19T  326830.3  4702994.0 Fri Nov 16 23:03:38 2001                                                   ^   18^Black       ^S+N^0\r
-cA    6289|||||\r
-cB    |||0|0|1.0e25\r
-cC    239.321491|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|3787.951 S mi\r
-cD    1.0e25|1.0e25|0\r
-\r
-W  6289            19T  326830.3  4702994.0 Fri Nov 16 23:03:38 2001 6289                                              ^   18^Black       ^S+N^0\r
-cA    6289|||||\r
-cB    |||0|0|1.0e25\r
-cC    239.321491|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|3787.951 S mi\r
-cD    1.0e25|1.0e25|0\r
-\r
-W  6297            19T  326910.4  4702728.7 Sat Jun 02 03:27:04 2001 6297                                              ^   18^Black       ^S+N^0\r
-cA    6297|||||\r
-cB    |||0|0|1.0e25\r
-cC    238.999995|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|3788.015 S mi\r
-cD    1.0e25|1.0e25|0\r
-\r
-W  6297            19T  326910.4  4702728.7 Sat Jun 02 03:27:04 2001                                                   ^   18^Black       ^S+N^0\r
-cA    6297|||||\r
-cB    |||0|0|1.0e25\r
-cC    238.999995|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|3788.015 S mi\r
-cD    1.0e25|1.0e25|0\r
-\r
-W  6328            19T  326241.2  4703800.2 Sat Jun 02 03:27:02 2001 6328                                              ^   18^Black       ^S+N^0\r
-cA    6328|||||\r
-cB    |||0|0|1.0e25\r
-cC    175.999994|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|3787.925 S mi\r
-cD    1.0e25|1.0e25|0\r
-\r
-W  6328            19T  326241.2  4703800.2 Sat Jun 02 03:27:02 2001                                                   ^   18^Black       ^S+N^0\r
-cA    6328|||||\r
-cB    |||0|0|1.0e25\r
-cC    175.999994|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|3787.925 S mi\r
-cD    1.0e25|1.0e25|0\r
-\r
-W  6353DEAD        19T  326524.2  4703311.6 Sat Jun 02 03:27:03 2001 Dead End                                          ^  166^Black       ^S+N^0\r
-cA    6353DEAD|||||\r
-cB    |||0|0|1.0e25\r
-cC    154.000004|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|3787.977 S mi\r
-cD    1.0e25|1.0e25|0\r
-\r
-W  6354            19T  326538.3  4703469.7 Sat Jun 02 03:27:03 2001 6354                                              ^   18^Black       ^S+N^0\r
-cA    6354|||||\r
-cB    |||0|0|1.0e25\r
-cC    144.000003|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|3787.909 S mi\r
-cD    1.0e25|1.0e25|0\r
-\r
-W  635722          19T  326527.7  4703720.8 Sat Jun 02 03:27:02 2001                                                   ^   18^Black       ^S+N^0\r
-cA    635722|||||\r
-cB    |||0|0|1.0e25\r
-cC    160.000005|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|3787.817 S mi\r
-cD    1.0e25|1.0e25|0\r
-\r
-W  635722          19T  326527.7  4703720.8 Sat Jun 02 03:27:02 2001 635722                                            ^   18^Black       ^S+N^0\r
-cA    635722|||||\r
-cB    |||0|0|1.0e25\r
-cC    160.000005|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|3787.817 S mi\r
-cD    1.0e25|1.0e25|0\r
-\r
-W  635783          19T  326582.0  4703730.3 Sat Jun 02 03:27:02 2001 635783                                            ^   18^Black       ^S+N^0\r
-cA    635783|||||\r
-cB    |||0|0|1.0e25\r
-cC    160.999999|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|3787.787 S mi\r
-cD    1.0e25|1.0e25|0\r
-\r
-W  635783          19T  326582.0  4703730.3 Sat Jun 02 03:27:02 2001                                                   ^   18^Black       ^S+N^0\r
-cA    635783|||||\r
-cB    |||0|0|1.0e25\r
-cC    160.999999|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|3787.787 S mi\r
-cD    1.0e25|1.0e25|0\r
-\r
-W  6373            19T  326762.1  4703385.6 Sat Jun 02 03:27:03 2001                                                   ^   18^Black       ^S+N^0\r
-cA    6373|||||\r
-cB    |||0|0|1.0e25\r
-cC    205.000004|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|3787.833 S mi\r
-cD    1.0e25|1.0e25|0\r
-\r
-W  6373            19T  326762.1  4703385.6 Sat Jun 02 03:27:03 2001 6373                                              ^   18^Black       ^S+N^0\r
-cA    6373|||||\r
-cB    |||0|0|1.0e25\r
-cC    205.000004|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|3787.833 S mi\r
-cD    1.0e25|1.0e25|0\r
-\r
-W  6634            19T  326332.9  4696457.9 Sat Jun 02 03:26:56 2001 6634                                              ^   18^Black       ^S+N^0\r
-cA    6634|||||\r
-cB    |||0|0|1.0e25\r
-cC    13.000000|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|3790.724 S mi\r
-cD    1.0e25|1.0e25|0\r
-\r
-W  6979            19T  326725.1  4699956.0 Sat Jun 02 03:26:56 2001 6979                                              ^   18^Black       ^S+N^0\r
-cA    6979|||||\r
-cB    |||0|0|1.0e25\r
-cC    43.999999|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|3789.179 S mi\r
-cD    1.0e25|1.0e25|0\r
-\r
-W  6997            19T  326609.6  4699782.4 Fri Nov 16 23:03:38 2001 6997                                              ^   18^Black       ^S+N^0\r
-cA    6997|||||\r
-cB    |||0|0|1.0e25\r
-cC    111.588205|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|3789.302 S mi\r
-cD    1.0e25|1.0e25|0\r
-\r
-W  BEAR HILL       19T  326748.2  4703629.5 Sat Jun 02 03:27:03 2001 BEAR HILL TOWER                                   ^16391^Black       ^S+N^0\r
-cA    BEAR HILL|||||\r
-cB    |||0|0|1.0e25\r
-cC    288.000007|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|3787.745 S mi\r
-cD    1.0e25|1.0e25|0\r
-\r
-W  BEAR HILL       19T  326748.2  4703629.5 Sat Jun 02 03:27:03 2001 BEAR HILL TOWER                                   ^16391^Black       ^S+N^0\r
-cA    BEAR HILL|||||\r
-cB    |||0|0|1.0e25\r
-cC    288.000007|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|3787.745 S mi\r
-cD    1.0e25|1.0e25|0\r
-\r
-W  BELLEVUE        19T  326630.3  4699772.7 Sat Jun 02 00:18:15 2001 BELLEVUE                                          ^  158^Black       ^S+N^0\r
-cA    BELLEVUE|||||\r
-cB    |||0|0|1.0e25\r
-cC    77.000002|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|3789.296 S mi\r
-cD    1.0e25|1.0e25|0\r
-\r
-W  BELLEVUE        19T  326630.3  4699772.7 Sat Jun 02 00:18:15 2001 BELLEVUE                                          ^  158^Black       ^S+N^0\r
-cA    BELLEVUE|||||\r
-cB    |||0|0|1.0e25\r
-cC    77.000002|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|3789.296 S mi\r
-cD    1.0e25|1.0e25|0\r
-\r
-W  BELLEVUE        19T  326630.3  4699772.7 Sat Jun 02 00:18:15 2001 BELLEVUE                                          ^  158^Black       ^S+N^0\r
-cA    BELLEVUE|||||\r
-cB    |||0|0|1.0e25\r
-cC    77.000002|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|3789.296 S mi\r
-cD    1.0e25|1.0e25|0\r
-\r
-W  DARKHOLLPO      19T  327033.8  4702825.6 Sat Jul 16 20:53:40 2005 Dark Hollow Pond                                  ^    7^Black       ^S+N^0\r
-cA    DARKHOLLPO|||||\r
-cB    |||0|0|1.0e25\r
-cC    1e25|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|3787.918 S mi\r
-cD    1.0e25|1.0e25|0\r
-\r
-W  GATE14          19T  325125.9  4702060.7 Sat Jun 02 03:26:59 2001 Gate 14                                           ^  176^Black       ^S+N^0\r
-cA    GATE14|||||\r
-cB    |||0|0|1.0e25\r
-cC    363.999990|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|3789.140 S mi\r
-cD    1.0e25|1.0e25|0\r
-\r
-W  GATE16          19T  325518.2  4702861.5 Sat Jun 02 03:27:00 2001 Gate 16                                           ^  176^Black       ^S+N^0\r
-cA    GATE16|||||\r
-cB    |||0|0|1.0e25\r
-cC    254.999997|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|3788.639 S mi\r
-cD    1.0e25|1.0e25|0\r
-\r
-W  GATE17          19T  325754.1  4702953.0 Sat Jun 02 03:27:01 2001 Gate 17                                           ^  176^Black       ^S+N^0\r
-cA    GATE17|||||\r
-cB    |||0|0|1.0e25\r
-cC    215.999999|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|3788.489 S mi\r
-cD    1.0e25|1.0e25|0\r
-\r
-W  GATE19          19T  325773.3  4703727.8 Sat Jun 02 03:27:02 2001 Gate 19                                           ^  176^Black       ^S+N^0\r
-cA    GATE19|||||\r
-cB    |||0|0|1.0e25\r
-cC    187.999996|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|3788.180 S mi\r
-cD    1.0e25|1.0e25|0\r
-\r
-W  GATE21          19T  326728.7  4703959.8 Sat Jun 02 03:27:03 2001 Gate 21                                           ^  176^Black       ^S+N^0\r
-cA    GATE21|||||\r
-cB    |||0|0|1.0e25\r
-cC    162.000005|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|3787.627 S mi\r
-cD    1.0e25|1.0e25|0\r
-\r
-W  GATE24          19T  327084.2  4702624.6 Sat Jun 02 03:27:03 2001 Gate 24                                           ^  176^Black       ^S+N^0\r
-cA    GATE24|||||\r
-cB    |||0|0|1.0e25\r
-cC    265.999992|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|3787.971 S mi\r
-cD    1.0e25|1.0e25|0\r
-\r
-W  GATE5           19T  326624.9  4699761.4 Wed Nov 28 21:05:28 2001 Gate 5                                            ^  176^Black       ^S+N^0\r
-cA    GATE5|||||\r
-cB    |||0|0|1.0e25\r
-cC    70.587318|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|3789.303 S mi\r
-cD    1.0e25|1.0e25|0\r
-\r
-W  GATE6           19T  326498.9  4699808.2 Wed Nov 07 23:53:41 2001 Gate 6                                            ^   18^Black       ^S+N^0\r
-cA    GATE6|||||\r
-cB    |||0|0|1.0e25\r
-cC    87.145307|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|3789.346 S mi\r
-cD    1.0e25|1.0e25|0\r
-\r
-W  GATE6           19T  326498.9  4699808.2 Wed Nov 07 23:53:41 2001                                                   ^   18^Black       ^S+N^0\r
-cA    GATE6|||||\r
-cB    |||0|0|1.0e25\r
-cC    87.145307|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|3789.346 S mi\r
-cD    1.0e25|1.0e25|0\r
-\r
-W  GATE6           19T  326498.9  4699808.2 Wed Nov 07 23:53:41 2001                                                   ^   18^Black       ^S+N^0\r
-cA    GATE6|||||\r
-cB    |||0|0|1.0e25\r
-cC    87.145307|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|3789.346 S mi\r
-cD    1.0e25|1.0e25|0\r
-\r
-W  PANTHRCAVE      19T  326451.1  4700224.9 Wed Nov 07 23:53:41 2001                                                   ^ 8243^Black       ^S+N^0\r
-cA    PANTHRCAVE|||||\r
-cB    |||0|0|1.0e25\r
-cC    148.646638|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|3789.207 S mi\r
-cD    1.0e25|1.0e25|0\r
-\r
-W  PANTHRCAVE      19T  326451.1  4700224.9 Wed Nov 07 23:53:41 2001 Panther Cave                                      ^ 8243^Black       ^S+N^0\r
-cA    PANTHRCAVE|||||\r
-cB    |||0|0|1.0e25\r
-cC    148.646638|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|3789.207 S mi\r
-cD    1.0e25|1.0e25|0\r
-\r
-W  PANTHRCAVE      19T  326451.1  4700224.9 Wed Nov 07 23:53:41 2001                                                   ^ 8243^Black       ^S+N^0\r
-cA    PANTHRCAVE|||||\r
-cB    |||0|0|1.0e25\r
-cC    148.646638|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|3789.207 S mi\r
-cD    1.0e25|1.0e25|0\r
-\r
-W  SHEEPFOLD       19T  326761.9  4702265.6 Sat Jun 02 00:18:13 2001 Sheepfold Parking Lot                             ^  158^Black       ^S+N^0\r
-cA    SHEEPFOLD|||||\r
-cB    |||0|0|1.0e25\r
-cC    229.000006|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|3788.267 S mi\r
-cD    1.0e25|1.0e25|0\r
-\r
-W  SOAPBOX         19T  326711.2  4702549.2 Sat Jun 02 03:27:04 2001 Soap Box Derby Track                              ^ 8235^Black       ^S+N^0\r
-cA    SOAPBOX|||||\r
-cB    |||0|0|1.0e25\r
-cC    210.000011|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|3788.181 S mi\r
-cD    1.0e25|1.0e25|0\r
-\r
-N  New Track Log Start - Trk from .gpx file,Black,1\r
-T  15R  633951.5  3326484.2 Sat May 25 17:06:21 2002 ;3.280840;      1e25; SM;    0.0000;    0.0000;    0.0000;       INF;         -;|1e25\r
-T  15R  633929.8  3326550.5 Sat May 25 17:09:55 2002 ;      1e25;      1e25; SM;    0.0434;    0.0434;    0.0434;0.730757;       214;|1e25\r
-T  15R  634151.6  3326544.0 Sat May 25 17:12:00 2002 ;      1e25;      1e25; SM;    0.1377;    0.1811;    0.1811;3.964510;       125;|1e25\r
-T  15R  634237.3  3326504.3 Sat May 25 17:12:48 2002 ;      1e25;      1e25; SM;    0.0586;    0.2397;    0.2397;4.397203;        48;|1e25\r
-T  15R  634440.8  3326418.2 Sat May 25 17:14:41 2002 ;      1e25;      1e25; SM;    0.1372;    0.3769;    0.3769;4.371133;       113;|1e25\r
-T  15R  635010.3  3326231.1 Sat May 25 17:17:16 2002 ;      1e25;      1e25; SM;    0.3720;    0.7489;    0.7489;8.640052;       155;|1e25\r
-T  15R  635275.0  3326014.6 Sat May 25 17:17:46 2002 ;      1e25;      1e25; SM;    0.2125;    0.9615;    0.9615;25.504435;        30;|1e25\r
-T  15R  635450.2  3325748.8 Sat May 25 17:18:20 2002 ;      1e25;      1e25; SM;    0.1981;    1.1596;    1.1596;20.979147;        34;|1e25\r
-T  15R  635672.3  3325585.3 Sat May 25 17:19:01 2002 ;      1e25;      1e25; SM;    0.1714;    1.3310;    1.3310;15.050832;        41;|1e25\r
-T  15R  635954.4  3325128.8 Sat May 25 17:20:46 2002 ;      1e25;      1e25; SM;    0.3341;    1.6651;    1.6651;11.454587;       105;|1e25\r
-T  15R  635942.5  3325049.3 Sat May 25 17:21:10 2002 ;      1e25;      1e25; SM;    0.0501;    1.7152;    1.7152;7.515936;        24;|1e25\r
-T  15R  635648.8  3325021.6 Sat May 25 17:21:51 2002 ;      1e25;      1e25; SM;    0.1830;    1.8982;    1.8982;16.070644;        41;|1e25\r
-T  15R  635313.2  3324732.9 Sat May 25 17:22:35 2002 ;      1e25;      1e25; SM;    0.2751;    2.1734;    2.1734;22.511499;        44;|1e25\r
-T  15R  635095.6  3324650.9 Sat May 25 17:23:08 2002 ;      1e25;      1e25; SM;    0.1443;    2.3177;    2.3177;15.745092;        33;|1e25\r
-T  15R  634943.7  3324846.7 Sat May 25 18:04:23 2002 ;      1e25;      1e25; SM;    0.1542;    2.4719;    2.4719;0.224257;      2475;|1e25\r
-T  15R  635005.2  3324814.2 Sat May 25 18:06:04 2002 ;6.561680;      1e25; SM;    0.0432;    2.5151;    2.5151;1.540302;       101;|1e25\r
-T  15R  635022.0  3324751.5 Sat May 25 18:07:06 2002 ;      1e25;      1e25; SM;    0.0404;    2.5555;    2.5555;2.346642;        62;|1e25\r
-T  15R  635072.2  3324726.3 Sat May 25 18:08:18 2002 ;3.280840;      1e25; SM;    0.0349;    2.5904;    2.5904;1.743045;        72;|1e25\r
-T  15R  635189.3  3324746.3 Sat May 25 18:10:20 2002 ;      1e25;      1e25; SM;    0.0737;    2.6641;    2.6641;2.174638;       122;|1e25\r
-T  15R  635243.9  3324745.1 Sat May 25 18:11:09 2002 ;      1e25;      1e25; SM;    0.0339;    2.6979;    2.6979;2.488559;        49;|1e25\r
-T  15R  635323.7  3324794.0 Sat May 25 18:12:18 2002 ;      1e25;      1e25; SM;    0.0582;    2.7561;    2.7561;3.034664;        69;|1e25\r
-T  15R  635432.0  3324869.3 Sat May 25 18:14:22 2002 ;      1e25;      1e25; SM;    0.0819;    2.8381;    2.8381;2.379163;       124;|1e25\r
-T  15R  635473.3  3324908.6 Sat May 25 18:15:04 2002 ;6.561680;      1e25; SM;    0.0354;    2.8735;    2.8735;3.037052;        42;|1e25\r
-T  15R  635538.6  3324959.3 Sat May 25 18:16:14 2002 ;3.280840;      1e25; SM;    0.0514;    2.9249;    2.9249;2.642554;        70;|1e25\r
-T  15R  635565.3  3325007.6 Sat May 25 18:17:01 2002 ;3.280840;      1e25; SM;    0.0344;    2.9593;    2.9593;2.632849;        47;|1e25\r
-T  15R  635559.6  3325081.5 Sat May 25 18:18:07 2002 ;      1e25;      1e25; SM;    0.0462;    3.0054;    3.0054;2.519028;        66;|1e25\r
-T  15R  635545.5  3325188.5 Sat May 25 18:19:51 2002 ;6.561680;      1e25; SM;    0.0673;    3.0727;    3.0727;2.329100;       104;|1e25\r
-T  15R  635531.9  3325240.0 Sat May 25 18:20:39 2002 ;      1e25;      1e25; SM;    0.0332;    3.1059;    3.1059;2.488490;        48;|1e25\r
-T  15R  635507.2  3325289.5 Sat May 25 18:21:24 2002 ;      1e25;      1e25; SM;    0.0345;    3.1404;    3.1404;2.760011;        45;|1e25\r
-T  15R  635506.4  3325352.4 Sat May 25 18:22:17 2002 ;      1e25;      1e25; SM;    0.0392;    3.1796;    3.1796;2.661007;        53;|1e25\r
-T  15R  635476.9  3325398.2 Sat May 25 18:23:18 2002 ;      1e25;      1e25; SM;    0.0339;    3.2135;    3.2135;2.003106;        61;|1e25\r
-T  15R  635474.3  3325486.9 Sat May 25 18:24:37 2002 ;      1e25;      1e25; SM;    0.0553;    3.2688;    3.2688;2.519224;        79;|1e25\r
-T  15R  635421.9  3325691.3 Sat May 25 18:28:13 2002 ;19.685039;      1e25; SM;    0.1315;    3.4003;    3.4003;2.191816;       216;|1e25\r
-T  15R  635449.2  3325565.9 Sat May 25 18:31:36 2002 ;6.561680;      1e25; SM;    0.0800;    3.4803;    3.4803;1.418052;       203;|1e25\r
-T  15R  635464.4  3325505.1 Sat May 25 18:32:56 2002 ;      1e25;      1e25; SM;    0.0390;    3.5193;    3.5193;1.757061;        80;|1e25\r
-T  15R  635460.4  3325444.1 Sat May 25 18:34:02 2002 ;      1e25;      1e25; SM;    0.0381;    3.5574;    3.5574;2.079208;        66;|1e25\r
-T  15R  635402.8  3325423.1 Sat May 25 18:36:03 2002 ;      1e25;      1e25; SM;    0.0380;    3.5955;    3.5955;1.131931;       121;|1e25\r
-T  15R  635351.2  3325426.2 Sat May 25 18:36:48 2002 ;      1e25;      1e25; SM;    0.0320;    3.6275;    3.6275;2.561370;        45;|1e25\r
-T  15R  635272.3  3325443.7 Sat May 25 18:37:52 2002 ;3.280840;      1e25; SM;    0.0501;    3.6776;    3.6776;2.820732;        64;|1e25\r
-T  15R  635168.8  3325496.0 Sat May 25 18:39:18 2002 ;      1e25;      1e25; SM;    0.0720;    3.7497;    3.7497;3.014423;        86;|1e25\r
-T  15R  635156.9  3325549.5 Sat May 25 18:40:15 2002 ;      1e25;      1e25; SM;    0.0342;    3.7838;    3.7838;2.157813;        57;|1e25\r
-T  15R  635175.7  3325588.5 Sat May 25 18:41:25 2002 ;19.685039;      1e25; SM;    0.0270;    3.8108;    3.8108;1.387488;        70;|1e25\r
-T  15R  635145.7  3325549.3 Sat May 25 18:42:37 2002 ;      1e25;      1e25; SM;    0.0307;    3.8415;    3.8415;1.534552;        72;|1e25\r
-T  15R  635162.3  3325503.3 Sat May 25 18:44:01 2002 ;      1e25;      1e25; SM;    0.0305;    3.8720;    3.8720;1.306042;        84;|1e25\r
-T  15R  635201.3  3325461.3 Sat May 25 18:45:53 2002 ;      1e25;      1e25; SM;    0.0357;    3.9076;    3.9076;1.146618;       112;|1e25\r
-T  15R  635258.0  3325434.3 Sat May 25 18:46:54 2002 ;      1e25;      1e25; SM;    0.0390;    3.9466;    3.9466;2.299515;        61;|1e25\r
-T  15R  635306.5  3325409.0 Sat May 25 18:47:42 2002 ;      1e25;      1e25; SM;    0.0340;    3.9806;    3.9806;2.549512;        48;|1e25\r
-T  15R  635378.9  3325400.7 Sat May 25 18:48:41 2002 ;      1e25;      1e25; SM;    0.0452;    4.0258;    4.0258;2.759120;        59;|1e25\r
-T  15R  635443.2  3325397.8 Sat May 25 18:49:52 2002 ;      1e25;      1e25; SM;    0.0399;    4.0657;    4.0657;2.022865;        71;|1e25\r
-T  15R  635474.2  3325361.2 Sat May 25 18:50:49 2002 ;      1e25;      1e25; SM;    0.0299;    4.0956;    4.0956;1.886267;        57;|1e25\r
-T  15R  635504.3  3325269.2 Sat May 25 18:52:14 2002 ;      1e25;      1e25; SM;    0.0603;    4.1559;    4.1559;2.553308;        85;|1e25\r
-T  15R  635521.0  3325215.9 Sat May 25 18:52:56 2002 ;      1e25;      1e25; SM;    0.0348;    4.1907;    4.1907;2.985822;        42;|1e25\r
-T  15R  635534.4  3325173.5 Sat May 25 18:53:38 2002 ;      1e25;      1e25; SM;    0.0277;    4.2184;    4.2184;2.374160;        42;|1e25\r
-T  15R  635572.8  3325053.9 Sat May 25 18:55:11 2002 ;      1e25;      1e25; SM;    0.0783;    4.2966;    4.2966;3.029246;        93;|1e25\r
-T  15R  635522.3  3324981.2 Sat May 25 18:56:32 2002 ;      1e25;      1e25; SM;    0.0551;    4.3517;    4.3517;2.447726;        81;|1e25\r
-T  15R  635474.6  3324940.0 Sat May 25 18:57:24 2002 ;      1e25;      1e25; SM;    0.0392;    4.3909;    4.3909;2.714362;        52;|1e25\r
-T  15R  635407.9  3324874.5 Sat May 25 18:58:40 2002 ;22.965879;      1e25; SM;    0.0581;    4.4490;    4.4490;2.751982;        76;|1e25\r
-T  15R  635355.4  3324825.9 Sat May 25 18:59:28 2002 ;      1e25;      1e25; SM;    0.0445;    4.4935;    4.4935;3.334841;        48;|1e25\r
-T  15R  635298.2  3324777.1 Sat May 25 19:00:22 2002 ;      1e25;      1e25; SM;    0.0468;    4.5403;    4.5403;3.117638;        54;|1e25\r
-T  15R  635197.2  3324750.0 Sat May 25 19:01:41 2002 ;      1e25;      1e25; SM;    0.0648;    4.6051;    4.6051;2.954261;        79;|1e25\r
-T  15R  635118.7  3324730.6 Sat May 25 19:02:48 2002 ;      1e25;      1e25; SM;    0.0502;    4.6553;    4.6553;2.697719;        67;|1e25\r
-T  15R  635070.4  3324739.3 Sat May 25 19:03:43 2002 ;      1e25;      1e25; SM;    0.0305;    4.6858;    4.6858;1.993899;        55;|1e25\r
-T  15R  635039.3  3324790.5 Sat May 25 19:04:49 2002 ;      1e25;      1e25; SM;    0.0373;    4.7231;    4.7231;2.036431;        66;|1e25\r
-T  15R  635001.8  3324828.9 Sat May 25 19:05:57 2002 ;      1e25;      1e25; SM;    0.0334;    4.7564;    4.7564;1.765615;        68;|1e25\r
-R  01 BELLEVUE\r
-W  BELLEVUE        19T  326630.3  4699772.7 Sat Jun 02 00:18:15 2001 BELLEVUE                                          ^  158^Black       ^S+N^0\r
-cA    BELLEVUE|||||\r
-cB    |||0|0|1.0e25\r
-cC    77.000002|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF\r
-cD    1.0e25|1.0e25|0\r
-\r
-W  GATE6           19T  326498.9  4699808.2 Wed Nov 07 23:53:41 2001                                                   ^   18^Black       ^S+N^0\r
-cA    GATE6|||||\r
-cB    |||0|0|1.0e25\r
-cC    87.145307|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF\r
-cD    1.0e25|1.0e25|0\r
-\r
-W  PANTHRCAVE      19T  326451.1  4700224.9 Wed Nov 07 23:53:41 2001                                                   ^ 8243^Black       ^S+N^0\r
-cA    PANTHRCAVE|||||\r
-cB    |||0|0|1.0e25\r
-cC    148.646638|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF\r
-cD    1.0e25|1.0e25|0\r
-\r
-W  6014MEADOW      19T  326186.1  4700429.0 Wed Nov 28 21:05:28 2001                                                   ^   18^Black       ^S+N^0\r
-cA    6014MEADOW|||||\r
-cB    |||0|0|1.0e25\r
-cC    123.415169|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF\r
-cD    1.0e25|1.0e25|0\r
-\r
-W  6006            19T  326091.0  4700682.6 Sat Jun 02 03:26:55 2001                                                   ^   18^Black       ^S+N^0\r
-cA    6006|||||\r
-cB    |||0|0|1.0e25\r
-cC    185.000002|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF\r
-cD    1.0e25|1.0e25|0\r
-\r
-W  6006BLUE        19T  326061.3  4700636.2 Wed Nov 28 21:05:28 2001                                                   ^   18^Black       ^S+N^0\r
-cA    6006BLUE|||||\r
-cB    |||0|0|1.0e25\r
-cC    151.012351|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF\r
-cD    1.0e25|1.0e25|0\r
-\r
-W  5096            19T  325951.7  4700674.8 Fri Nov 16 23:03:38 2001                                                   ^   18^Black       ^S+N^0\r
-cA    5096|||||\r
-cB    |||0|0|1.0e25\r
-cC    147.069896|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF\r
-cD    1.0e25|1.0e25|0\r
-\r
-W  5066            19T  325694.0  4700676.9 Wed Nov 28 21:05:28 2001                                                   ^ 8238^Black       ^S+N^0\r
-cA    5066|||||\r
-cB    |||0|0|1.0e25\r
-cC    146.281325|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF\r
-cD    1.0e25|1.0e25|0\r
-\r
-W  5067            19T  325661.1  4700716.5 Sat Jun 02 03:26:55 2001                                                   ^   18^Black       ^S+N^0\r
-cA    5067|||||\r
-cB    |||0|0|1.0e25\r
-cC    189.000002|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF\r
-cD    1.0e25|1.0e25|0\r
-\r
-W  5058ROAD        19T  325561.6  4700804.1 Sat Jun 02 00:18:14 2001 ROAD CROSSING                                     ^   18^Black       ^S+N^0\r
-cA    5058ROAD|||||\r
-cB    |||0|0|1.0e25\r
-cC    177.000001|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF\r
-cD    1.0e25|1.0e25|0\r
-\r
-W  5150TANK        19T  325504.6  4700998.2 Sat Jun 02 00:18:16 2001 WATER TANK                                        ^ 8211^Black       ^S+N^0\r
-cA    5150TANK|||||\r
-cB    |||0|0|1.0e25\r
-cC    221.000006|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF\r
-cD    1.0e25|1.0e25|0\r
-\r
-W  5142            19T  325480.4  4701240.7 Wed Nov 28 21:05:28 2001                                                   ^   18^Black       ^S+N^0\r
-cA    5142|||||\r
-cB    |||0|0|1.0e25\r
-cC    165.993197|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF\r
-cD    1.0e25|1.0e25|0\r
-\r
-W  5144SUMMIT      19T  325418.6  4701403.9 Wed Nov 28 21:05:28 2001                                                   ^ 8246^Black       ^S+N^0\r
-cA    5144SUMMIT|||||\r
-cB    |||0|0|1.0e25\r
-cC    202.263459|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF\r
-cD    1.0e25|1.0e25|0\r
-\r
-W  5156            19T  325538.9  4701616.4 Sat Jun 02 03:26:58 2001                                                   ^   18^Black       ^S+N^0\r
-cA    5156|||||\r
-cB    |||0|0|1.0e25\r
-cC    418.999990|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF\r
-cD    1.0e25|1.0e25|0\r
-\r
-W  5148NANEPA      19T  325474.0  4701892.1 Wed Nov 07 23:53:41 2001                                                   ^   18^Black       ^S+N^0\r
-cA    5148NANEPA|||||\r
-cB    |||0|0|1.0e25\r
-cC    393.074416|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF\r
-cD    1.0e25|1.0e25|0\r
-\r
-W  5258            19T  325525.9  4702077.2 Wed Nov 07 23:53:41 2001                                                   ^   18^Black       ^S+N^0\r
-cA    5258|||||\r
-cB    |||0|0|1.0e25\r
-cC    244.840687|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF\r
-cD    1.0e25|1.0e25|0\r
-\r
-W  5252PURPLE      19T  325574.9  4702277.5 Wed Nov 07 23:53:41 2001                                                   ^ 8246^Black       ^S+N^0\r
-cA    5252PURPLE|||||\r
-cB    |||0|0|1.0e25\r
-cC    255.879480|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF\r
-cD    1.0e25|1.0e25|0\r
-\r
-W  527631          19T  325735.7  4702606.4 Wed Nov 07 23:53:41 2001                                                   ^   18^Black       ^S+N^0\r
-cA    527631|||||\r
-cB    |||0|0|1.0e25\r
-cC    258.245193|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF\r
-cD    1.0e25|1.0e25|0\r
-\r
-W  527614          19T  325710.4  4702644.8 Wed Nov 07 23:53:41 2001                                                   ^   18^Black       ^S+N^0\r
-cA    527614|||||\r
-cB    |||0|0|1.0e25\r
-cC    258.245193|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF\r
-cD    1.0e25|1.0e25|0\r
-\r
-W  5267OBSTAC      19T  325698.7  4702733.5 Sat Jun 02 03:27:00 2001                                                   ^ 8204^Black       ^S+N^0\r
-cA    5267OBSTAC|||||\r
-cB    |||0|0|1.0e25\r
-cC    241.999989|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF\r
-cD    1.0e25|1.0e25|0\r
-\r
-W  5278            19T  325759.2  4702816.5 Sat Jun 02 03:27:00 2001                                                   ^   18^Black       ^S+N^0\r
-cA    5278|||||\r
-cB    |||0|0|1.0e25\r
-cC    224.000000|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF\r
-cD    1.0e25|1.0e25|0\r
-\r
-W  5289            19T  325881.1  4702950.0 Sat Jun 02 03:27:01 2001                                                   ^   18^Black       ^S+N^0\r
-cA    5289|||||\r
-cB    |||0|0|1.0e25\r
-cC    210.000011|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF\r
-cD    1.0e25|1.0e25|0\r
-\r
-W  5374FIRE        19T  325718.9  4703488.0 Wed Nov 28 21:05:28 2001                                                   ^   18^Black       ^S+N^0\r
-cA    5374FIRE|||||\r
-cB    |||0|0|1.0e25\r
-cC    173.877706|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF\r
-cD    1.0e25|1.0e25|0\r
-\r
-W  5376            19T  325758.3  4703650.1 Sat Jun 02 03:27:02 2001                                                   ^   18^Black       ^S+N^0\r
-cA    5376|||||\r
-cB    |||0|0|1.0e25\r
-cC    185.000002|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF\r
-cD    1.0e25|1.0e25|0\r
-\r
-W  5376STREAM      19T  325764.8  4703679.1 Wed Nov 07 23:53:41 2001                                                   ^ 8233^Black       ^S+N^0\r
-cA    5376STREAM|||||\r
-cB    |||0|0|1.0e25\r
-cC    211.724709|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF\r
-cD    1.0e25|1.0e25|0\r
-\r
-W  6328            19T  326241.2  4703800.2 Sat Jun 02 03:27:02 2001                                                   ^   18^Black       ^S+N^0\r
-cA    6328|||||\r
-cB    |||0|0|1.0e25\r
-cC    175.999994|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF\r
-cD    1.0e25|1.0e25|0\r
-\r
-W  635722          19T  326527.7  4703720.8 Sat Jun 02 03:27:02 2001                                                   ^   18^Black       ^S+N^0\r
-cA    635722|||||\r
-cB    |||0|0|1.0e25\r
-cC    160.000005|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF\r
-cD    1.0e25|1.0e25|0\r
-\r
-W  635783          19T  326582.0  4703730.3 Sat Jun 02 03:27:02 2001                                                   ^   18^Black       ^S+N^0\r
-cA    635783|||||\r
-cB    |||0|0|1.0e25\r
-cC    160.999999|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF\r
-cD    1.0e25|1.0e25|0\r
-\r
-W  6373            19T  326762.1  4703385.6 Sat Jun 02 03:27:03 2001                                                   ^   18^Black       ^S+N^0\r
-cA    6373|||||\r
-cB    |||0|0|1.0e25\r
-cC    205.000004|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF\r
-cD    1.0e25|1.0e25|0\r
-\r
-W  BEAR HILL       19T  326748.2  4703629.5 Sat Jun 02 03:27:03 2001 BEAR HILL TOWER                                   ^16391^Black       ^S+N^0\r
-cA    BEAR HILL|||||\r
-cB    |||0|0|1.0e25\r
-cC    288.000007|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF\r
-cD    1.0e25|1.0e25|0\r
-\r
-W  6289            19T  326830.3  4702994.0 Fri Nov 16 23:03:38 2001                                                   ^   18^Black       ^S+N^0\r
-cA    6289|||||\r
-cB    |||0|0|1.0e25\r
-cC    239.321491|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF\r
-cD    1.0e25|1.0e25|0\r
-\r
-W  6297            19T  326910.4  4702728.7 Sat Jun 02 03:27:04 2001                                                   ^   18^Black       ^S+N^0\r
-cA    6297|||||\r
-cB    |||0|0|1.0e25\r
-cC    238.999995|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF\r
-cD    1.0e25|1.0e25|0\r
-\r
-W  6283            19T  326892.6  4702310.1 Fri Nov 16 23:03:38 2001                                                   ^   18^Black       ^S+N^0\r
-cA    6283|||||\r
-cB    |||0|0|1.0e25\r
-cC    218.821047|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF\r
-cD    1.0e25|1.0e25|0\r
-\r
-W  6280            19T  326869.0  4702042.4 Fri Nov 16 23:03:38 2001                                                   ^   18^Black       ^S+N^0\r
-cA    6280|||||\r
-cB    |||0|0|1.0e25\r
-cC    188.858953|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF\r
-cD    1.0e25|1.0e25|0\r
-\r
-W  6177            19T  326799.5  4701712.8 Sat Jun 02 03:27:04 2001                                                   ^   18^Black       ^S+N^0\r
-cA    6177|||||\r
-cB    |||0|0|1.0e25\r
-cC    203.999997|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF\r
-cD    1.0e25|1.0e25|0\r
-\r
-W  6176            19T  326759.4  4701642.2 Sat Jun 02 03:27:04 2001                                                   ^   18^Black       ^S+N^0\r
-cA    6176|||||\r
-cB    |||0|0|1.0e25\r
-cC    205.000004|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF\r
-cD    1.0e25|1.0e25|0\r
-\r
-W  6153            19T  326565.3  4701310.2 Sat Jun 02 03:27:05 2001                                                   ^   18^Black       ^S+N^0\r
-cA    6153|||||\r
-cB    |||0|0|1.0e25\r
-cC    205.999998|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF\r
-cD    1.0e25|1.0e25|0\r
-\r
-W  6171            19T  326774.3  4701173.8 Sat Jun 02 03:27:05 2001                                                   ^   18^Black       ^S+N^0\r
-cA    6171|||||\r
-cB    |||0|0|1.0e25\r
-cC    181.999995|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF\r
-cD    1.0e25|1.0e25|0\r
-\r
-W  6131            19T  326349.9  4701116.5 Sat Jun 02 03:26:58 2001                                                   ^   18^Black       ^S+N^0\r
-cA    6131|||||\r
-cB    |||0|0|1.0e25\r
-cC    210.000011|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF\r
-cD    1.0e25|1.0e25|0\r
-\r
-W  6130            19T  326386.1  4701028.3 Sat Jun 02 03:26:55 2001                                                   ^   18^Black       ^S+N^0\r
-cA    6130|||||\r
-cB    |||0|0|1.0e25\r
-cC    210.000011|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF\r
-cD    1.0e25|1.0e25|0\r
-\r
-W  6029            19T  326200.2  4700983.9 Sat Jun 02 03:26:55 2001                                                   ^   18^Black       ^S+N^0\r
-cA    6029|||||\r
-cB    |||0|0|1.0e25\r
-cC    185.000002|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF\r
-cD    1.0e25|1.0e25|0\r
-\r
-W  6006            19T  326091.0  4700682.6 Sat Jun 02 03:26:55 2001                                                   ^   18^Black       ^S+N^0\r
-cA    6006|||||\r
-cB    |||0|0|1.0e25\r
-cC    185.000002|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF\r
-cD    1.0e25|1.0e25|0\r
-\r
-W  6014MEADOW      19T  326186.1  4700429.0 Wed Nov 28 21:05:28 2001                                                   ^   18^Black       ^S+N^0\r
-cA    6014MEADOW|||||\r
-cB    |||0|0|1.0e25\r
-cC    123.415169|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF\r
-cD    1.0e25|1.0e25|0\r
-\r
-W  PANTHRCAVE      19T  326451.1  4700224.9 Wed Nov 07 23:53:41 2001                                                   ^ 8243^Black       ^S+N^0\r
-cA    PANTHRCAVE|||||\r
-cB    |||0|0|1.0e25\r
-cC    148.646638|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF\r
-cD    1.0e25|1.0e25|0\r
-\r
-W  GATE6           19T  326498.9  4699808.2 Wed Nov 07 23:53:41 2001                                                   ^   18^Black       ^S+N^0\r
-cA    GATE6|||||\r
-cB    |||0|0|1.0e25\r
-cC    87.145307|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF\r
-cD    1.0e25|1.0e25|0\r
-\r
-W  BELLEVUE        19T  326630.3  4699772.7 Sat Jun 02 00:18:15 2001 BELLEVUE                                          ^  158^Black       ^S+N^0\r
-cA    BELLEVUE|||||\r
-cB    |||0|0|1.0e25\r
-cC    77.000002|1e25|FF|00|00|00|00|00|00|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF\r
-cD    1.0e25|1.0e25|0\r
-\r
-E  01\r
index e7c80cdf738cf96c4445117b367048833fe4c603..75281f4712fa8af3b700e1375f261f3997b5b4a5 100644 (file)
@@ -2,7 +2,6 @@ baroiq          Brauniger IQ Series Barograph Download
 cambridge      dat     Cambridge/Winpilot glider software
 v900           Columbus/Visiontac V900 files (.csv)
 csv            Comma separated values
-compegps               CompeGPS data files (.wpt/.trk/.rte)
 iblue747       csv     Data Logger iBlue747 csv
 iblue757       csv     Data Logger iBlue757 csv
 gpl    gpl     DeLorme GPL
@@ -22,13 +21,11 @@ garmin_fit  fit     Flexible and Interoperable Data Transfer (FIT) Activity file
 flysight       csv     FlySight GPS File
 gpssim gpssim  Franson GPSGate Simulation
 fugawi txt     Fugawi
-g7towin        g7t     G7ToWin data files (.g7t)
 garmin301              Garmin 301 Custom position and heartrate
 garmin_g1000   csv     Garmin G1000 datalog input filter file
 glogbook       xml     Garmin Logbook XML
 gdb    gdb     Garmin MapSource - gdb
 garmin_txt     txt     Garmin MapSource - txt (tab delimited)
-pcx    pcx     Garmin PCX5
 garmin_poi             Garmin POI database
 garmin_gpi     gpi     Garmin Points of Interest (.gpi)
 garmin         Garmin serial/USB protocol
@@ -45,20 +42,16 @@ globalsat           GlobalSat GH625XT GPS training watch
 googledir      xml     Google Directions XML
 kml    kml     Google Earth (Keyhole) Markup Language
 gnav_trl       trl     Google Navigator Tracklines (.trl)
-gopal  trk     GoPal GPS track log (.trk)
 land_air_sea   txt     GPS Tracking Key Pro text
 gtm    gtm     GPS TrackMaker
 arc    txt     GPSBabel arc filter file
 gpsdrive               GpsDrive Format
 gpsdrivetrack          GpsDrive Format for Tracks
-gpsman         GPSman
-gpsutil                gpsutil
 gpx    gpx     GPX XML
 hiketech       gps     HikeTech
 holux  wpo     Holux (gm-100) .wpo Format
 m241-bin       bin     Holux M-241 (MTK based) Binary File Format
 m241           Holux M-241 (MTK based) download
-vpl            Honda/Acura Navigation System VP Log File Format
 html   html    HTML Output
 humminbird_ht  ht      Humminbird tracks (.ht)
 humminbird     hwr     Humminbird waypoints and routes (.hwr)
@@ -66,13 +59,9 @@ ignrando     rdn     IGN Rando track files
 igoprimo_poi   upoi    iGo Primo points of interest (.upoi)
 igo2008_poi    upoi    iGO2008 points of interest (.upoi)
 igo8   trk     IGO8 .trk
-jtr    jtr     Jelbert GeoTagger data file
-jogmap xml     Jogmap.de XML format
 kompass_tk     wp      Kompass (DAV) Track (.tk)
 kompass_wp     wp      Kompass (DAV) Waypoints (.wp)
 lowranceusr    usr     Lowrance USR
-maggeo gs      Magellan Explorist Geocaching
-mapsend                Magellan Mapsend
 magellanx      upt     Magellan SD files (as for eXplorist)
 magellan               Magellan SD files (as for Meridian)
 magellan               Magellan serial protocol
@@ -98,7 +87,6 @@ tpg   tpg     National Geographic Topo .tpg (waypoints)
 tpo2   tpo     National Geographic Topo 2.x .tpo
 tpo3   tpo     National Geographic Topo 3.x/4.x .tpo
 navicache              Navicache.com XML
-nmn4   rte     Navigon Mobile Navigator .rte files
 navigonwpt             Navigon Waypoints
 navilink               NaviGPS GT-11/BGT-11 Download
 sbp    sbp     NaviGPS GT-31/BGT-31 datalogger (.sbp)
@@ -110,19 +98,13 @@ nmea               NMEA 0183 sentences
 lmx            Nokia Landmark Exchange
 osm    osm     OpenStreetMap data files
 ozi            OziExplorer
-pocketfms_bc           PocketFMS breadcrumbs
-pocketfms_fp   xml     PocketFMS flightplan (.xml)
-pocketfms_wp   txt     PocketFMS waypoints (.txt)
 qstarz_bl-1000         Qstarz BL-1000
 raymarine      rwf     Raymarine Waypoint File (.rwf)
 ricoh  log     Ricoh GPS Log File
 cup    cup     See You flight analysis data
-skyforce               Skymap / KMD150 ascii files
 skytraq                SkyTraq Venus based loggers (download)
 skytraq-bin    bin     SkyTraq Venus based loggers Binary File Format
 subrip srt     SubRip subtitles for video mapping (.srt)
-stmsdf sdf     Suunto Trek Manager (STM) .sdf files
-stmwpp txt     Suunto Trek Manager (STM) WaypointPlus files
 xol    xol     Swiss Map 25/50/100 (.xol)
 openoffice             Tab delimited fields useful for OpenOffice
 teletype               Teletype [ Get Jonathon Johnson to describe
@@ -132,17 +114,11 @@ tomtom_itn_places itn     TomTom Places Itineraries (.itn)
 tomtom_asc     asc     TomTom POI file (.asc)
 tomtom ov2     TomTom POI file (.ov2)
 dmtlog trl     TrackLogs digital mapping (.trl)
-tiger          U.S. Census Bureau Tiger Mapping Service
 unicsv         Universal csv with field structure in first line
 vcard  vcf     Vcard Output (for iPod)
-vidaone        gpb     VidaOne GPS for Pocket PC (.gpb)
-vitosmt        smt     Vito Navigator II tracks
-vitovtt        vtt     Vito SmartMap tracks (.vtt)
-wfff   xml     WiFiFoFum 2.0 for PocketPC XML
 wintec_tes     tes     Wintec TES file
 wbt-bin        bin     Wintec WBT-100/200 Binary File Format
 wbt            Wintec WBT-100/200 GPS Download
 wbt-tk1        tk1     Wintec WBT-201/G-Rays 2 Binary File Format
 itracku                XAiOX iTrackU Logger
 itracku-bin    bin     XAiOX iTrackU Logger Binary File Format
-yahoo          Yahoo Geocode API data
index 2cbb2580147a75d424a1f92c72ae3b4c38e55939..4af18c9e45674d583499d2e4c26358d659d1a564 100644 (file)
@@ -4,7 +4,6 @@ serial  baroiq          Brauniger IQ Series Barograph Download
 file   cambridge       dat     Cambridge/Winpilot glider software
 file   v900            Columbus/Visiontac V900 files (.csv)
 file   csv             Comma separated values
-file   compegps                CompeGPS data files (.wpt/.trk/.rte)
 internal       custom          Custom "Everything" Style
 file   iblue747        csv     Data Logger iBlue747 csv
 file   iblue757        csv     Data Logger iBlue757 csv
@@ -25,13 +24,11 @@ file        garmin_fit      fit     Flexible and Interoperable Data Transfer (FIT) Activity file
 file   flysight        csv     FlySight GPS File
 file   gpssim  gpssim  Franson GPSGate Simulation
 file   fugawi  txt     Fugawi
-file   g7towin g7t     G7ToWin data files (.g7t)
 file   garmin301               Garmin 301 Custom position and heartrate
 file   garmin_g1000    csv     Garmin G1000 datalog input filter file
 file   glogbook        xml     Garmin Logbook XML
 file   gdb     gdb     Garmin MapSource - gdb
 file   garmin_txt      txt     Garmin MapSource - txt (tab delimited)
-file   pcx     pcx     Garmin PCX5
 file   garmin_poi              Garmin POI database
 file   garmin_gpi      gpi     Garmin Points of Interest (.gpi)
 serial garmin          Garmin serial/USB protocol
@@ -50,20 +47,16 @@ serial      globalsat               GlobalSat GH625XT GPS training watch
 file   googledir       xml     Google Directions XML
 file   kml     kml     Google Earth (Keyhole) Markup Language
 file   gnav_trl        trl     Google Navigator Tracklines (.trl)
-file   gopal   trk     GoPal GPS track log (.trk)
 file   land_air_sea    txt     GPS Tracking Key Pro text
 file   gtm     gtm     GPS TrackMaker
 file   arc     txt     GPSBabel arc filter file
 file   gpsdrive                GpsDrive Format
 file   gpsdrivetrack           GpsDrive Format for Tracks
-file   gpsman          GPSman
-file   gpsutil         gpsutil
 file   gpx     gpx     GPX XML
 file   hiketech        gps     HikeTech
 file   holux   wpo     Holux (gm-100) .wpo Format
 file   m241-bin        bin     Holux M-241 (MTK based) Binary File Format
 serial m241            Holux M-241 (MTK based) download
-file   vpl             Honda/Acura Navigation System VP Log File Format
 file   html    html    HTML Output
 file   humminbird_ht   ht      Humminbird tracks (.ht)
 file   humminbird      hwr     Humminbird waypoints and routes (.hwr)
@@ -72,13 +65,9 @@ file igoprimo_poi    upoi    iGo Primo points of interest (.upoi)
 file   igo2008_poi     upoi    iGO2008 points of interest (.upoi)
 file   igo8    trk     IGO8 .trk
 internal       random          Internal GPS data generator
-file   jtr     jtr     Jelbert GeoTagger data file
-file   jogmap  xml     Jogmap.de XML format
 file   kompass_tk      wp      Kompass (DAV) Track (.tk)
 file   kompass_wp      wp      Kompass (DAV) Waypoints (.wp)
 file   lowranceusr     usr     Lowrance USR
-file   maggeo  gs      Magellan Explorist Geocaching
-file   mapsend         Magellan Mapsend
 file   magellanx       upt     Magellan SD files (as for eXplorist)
 file   magellan                Magellan SD files (as for Meridian)
 serial magellan                Magellan serial protocol
@@ -104,7 +93,6 @@ file tpg     tpg     National Geographic Topo .tpg (waypoints)
 file   tpo2    tpo     National Geographic Topo 2.x .tpo
 file   tpo3    tpo     National Geographic Topo 3.x/4.x .tpo
 file   navicache               Navicache.com XML
-file   nmn4    rte     Navigon Mobile Navigator .rte files
 file   navigonwpt              Navigon Waypoints
 serial navilink                NaviGPS GT-11/BGT-11 Download
 file   sbp     sbp     NaviGPS GT-31/BGT-31 datalogger (.sbp)
@@ -116,19 +104,13 @@ file      nmea            NMEA 0183 sentences
 file   lmx             Nokia Landmark Exchange
 file   osm     osm     OpenStreetMap data files
 file   ozi             OziExplorer
-file   pocketfms_bc            PocketFMS breadcrumbs
-file   pocketfms_fp    xml     PocketFMS flightplan (.xml)
-file   pocketfms_wp    txt     PocketFMS waypoints (.txt)
 file   qstarz_bl-1000          Qstarz BL-1000
 file   raymarine       rwf     Raymarine Waypoint File (.rwf)
 file   ricoh   log     Ricoh GPS Log File
 file   cup     cup     See You flight analysis data
-file   skyforce                Skymap / KMD150 ascii files
 serial skytraq         SkyTraq Venus based loggers (download)
 file   skytraq-bin     bin     SkyTraq Venus based loggers Binary File Format
 file   subrip  srt     SubRip subtitles for video mapping (.srt)
-file   stmsdf  sdf     Suunto Trek Manager (STM) .sdf files
-file   stmwpp  txt     Suunto Trek Manager (STM) WaypointPlus files
 file   xol     xol     Swiss Map 25/50/100 (.xol)
 file   openoffice              Tab delimited fields useful for OpenOffice
 file   teletype                Teletype [ Get Jonathon Johnson to describe
@@ -138,17 +120,11 @@ file      tomtom_itn_places       itn     TomTom Places Itineraries (.itn)
 file   tomtom_asc      asc     TomTom POI file (.asc)
 file   tomtom  ov2     TomTom POI file (.ov2)
 file   dmtlog  trl     TrackLogs digital mapping (.trl)
-file   tiger           U.S. Census Bureau Tiger Mapping Service
 file   unicsv          Universal csv with field structure in first line
 file   vcard   vcf     Vcard Output (for iPod)
-file   vidaone gpb     VidaOne GPS for Pocket PC (.gpb)
-file   vitosmt smt     Vito Navigator II tracks
-file   vitovtt vtt     Vito SmartMap tracks (.vtt)
-file   wfff    xml     WiFiFoFum 2.0 for PocketPC XML
 file   wintec_tes      tes     Wintec TES file
 file   wbt-bin bin     Wintec WBT-100/200 Binary File Format
 serial wbt             Wintec WBT-100/200 GPS Download
 file   wbt-tk1 tk1     Wintec WBT-201/G-Rays 2 Binary File Format
 serial itracku         XAiOX iTrackU Logger
 file   itracku-bin     bin     XAiOX iTrackU Logger Binary File Format
-file   yahoo           Yahoo Geocode API data
index 2ca9310a19aa6f2fd73472a4ad5a6701e484dc29..387d69e183bb83c2e35e27dce3c85c48670d58fa 100644 (file)
@@ -4,7 +4,6 @@ serial  --r---  baroiq          Brauniger IQ Series Barograph Download
 file   rw----  cambridge       dat     Cambridge/Winpilot glider software
 file   r-r---  v900            Columbus/Visiontac V900 files (.csv)
 file   rw----  csv             Comma separated values
-file   rwrwrw  compegps                CompeGPS data files (.wpt/.trk/.rte)
 internal       rw----  custom          Custom "Everything" Style
 file   --rw--  iblue747        csv     Data Logger iBlue747 csv
 file   --rw--  iblue757        csv     Data Logger iBlue757 csv
@@ -25,13 +24,11 @@ file        -wrw--  garmin_fit      fit     Flexible and Interoperable Data Transfer (FIT) Activi
 file   rw----  flysight        csv     FlySight GPS File
 file   -w-w-w  gpssim  gpssim  Franson GPSGate Simulation
 file   rw----  fugawi  txt     Fugawi
-file   r-r-r-  g7towin g7t     G7ToWin data files (.g7t)
 file   rw----  garmin301               Garmin 301 Custom position and heartrate
 file   --rw--  garmin_g1000    csv     Garmin G1000 datalog input filter file
 file   --rw--  glogbook        xml     Garmin Logbook XML
 file   rwrwrw  gdb     gdb     Garmin MapSource - gdb
 file   rwrwrw  garmin_txt      txt     Garmin MapSource - txt (tab delimited)
-file   rwrwrw  pcx     pcx     Garmin PCX5
 file   rw----  garmin_poi              Garmin POI database
 file   rw----  garmin_gpi      gpi     Garmin Points of Interest (.gpi)
 serial rwrwrw  garmin          Garmin serial/USB protocol
@@ -50,20 +47,16 @@ serial      --r---  globalsat               GlobalSat GH625XT GPS training watch
 file   --r---  googledir       xml     Google Directions XML
 file   rwrwrw  kml     kml     Google Earth (Keyhole) Markup Language
 file   --rw--  gnav_trl        trl     Google Navigator Tracklines (.trl)
-file   --rw--  gopal   trk     GoPal GPS track log (.trk)
 file   --rw--  land_air_sea    txt     GPS Tracking Key Pro text
 file   rwrwrw  gtm     gtm     GPS TrackMaker
 file   rw----  arc     txt     GPSBabel arc filter file
 file   rw----  gpsdrive                GpsDrive Format
 file   rw----  gpsdrivetrack           GpsDrive Format for Tracks
-file   rw----  gpsman          GPSman
-file   rw----  gpsutil         gpsutil
 file   rwrwrw  gpx     gpx     GPX XML
 file   rwrw--  hiketech        gps     HikeTech
 file   rw----  holux   wpo     Holux (gm-100) .wpo Format
 file   r-r---  m241-bin        bin     Holux M-241 (MTK based) Binary File Format
 serial --r---  m241            Holux M-241 (MTK based) download
-file   --r---  vpl             Honda/Acura Navigation System VP Log File Format
 file   -w----  html    html    HTML Output
 file   r-rwr-  humminbird_ht   ht      Humminbird tracks (.ht)
 file   rwr-rw  humminbird      hwr     Humminbird waypoints and routes (.hwr)
@@ -72,13 +65,9 @@ file rw----  igoprimo_poi    upoi    iGo Primo points of interest (.upoi)
 file   rw----  igo2008_poi     upoi    iGO2008 points of interest (.upoi)
 file   --rw--  igo8    trk     IGO8 .trk
 internal       r-r-r-  random          Internal GPS data generator
-file   --rw--  jtr     jtr     Jelbert GeoTagger data file
-file   --r---  jogmap  xml     Jogmap.de XML format
 file   --rw--  kompass_tk      wp      Kompass (DAV) Track (.tk)
 file   rw----  kompass_wp      wp      Kompass (DAV) Waypoints (.wp)
 file   rwrwrw  lowranceusr     usr     Lowrance USR
-file   rw----  maggeo  gs      Magellan Explorist Geocaching
-file   rwrwrw  mapsend         Magellan Mapsend
 file   rwrwrw  magellanx       upt     Magellan SD files (as for eXplorist)
 file   rwrwrw  magellan                Magellan SD files (as for Meridian)
 serial rwrwrw  magellan                Magellan serial protocol
@@ -104,7 +93,6 @@ file rw----  tpg     tpg     National Geographic Topo .tpg (waypoints)
 file   --r---  tpo2    tpo     National Geographic Topo 2.x .tpo
 file   r-r-r-  tpo3    tpo     National Geographic Topo 3.x/4.x .tpo
 file   r-----  navicache               Navicache.com XML
-file   ----rw  nmn4    rte     Navigon Mobile Navigator .rte files
 file   rw----  navigonwpt              Navigon Waypoints
 serial rwrwrw  navilink                NaviGPS GT-11/BGT-11 Download
 file   --r---  sbp     sbp     NaviGPS GT-31/BGT-31 datalogger (.sbp)
@@ -116,19 +104,13 @@ file      rwrw--  nmea            NMEA 0183 sentences
 file   rw----  lmx             Nokia Landmark Exchange
 file   rw-wrw  osm     osm     OpenStreetMap data files
 file   rwrwrw  ozi             OziExplorer
-file   --rw--  pocketfms_bc            PocketFMS breadcrumbs
-file   r---r-  pocketfms_fp    xml     PocketFMS flightplan (.xml)
-file   rw----  pocketfms_wp    txt     PocketFMS waypoints (.txt)
 file   r-r---  qstarz_bl-1000          Qstarz BL-1000
 file   rw--rw  raymarine       rwf     Raymarine Waypoint File (.rwf)
 file   --rw--  ricoh   log     Ricoh GPS Log File
 file   rw----  cup     cup     See You flight analysis data
-file   rwrwrw  skyforce                Skymap / KMD150 ascii files
 serial r-r---  skytraq         SkyTraq Venus based loggers (download)
 file   r-r---  skytraq-bin     bin     SkyTraq Venus based loggers Binary File Format
 file   ---w--  subrip  srt     SubRip subtitles for video mapping (.srt)
-file   --rwrw  stmsdf  sdf     Suunto Trek Manager (STM) .sdf files
-file   rwrwrw  stmwpp  txt     Suunto Trek Manager (STM) WaypointPlus files
 file   rwrw--  xol     xol     Swiss Map 25/50/100 (.xol)
 file   rw----  openoffice              Tab delimited fields useful for OpenOffice
 file   r-----  teletype                Teletype [ Get Jonathon Johnson to describe
@@ -138,17 +120,11 @@ file      ----rw  tomtom_itn_places       itn     TomTom Places Itineraries (.itn)
 file   rw----  tomtom_asc      asc     TomTom POI file (.asc)
 file   rw----  tomtom  ov2     TomTom POI file (.ov2)
 file   rwrw--  dmtlog  trl     TrackLogs digital mapping (.trl)
-file   rw----  tiger           U.S. Census Bureau Tiger Mapping Service
 file   rwrwrw  unicsv          Universal csv with field structure in first line
 file   -w----  vcard   vcf     Vcard Output (for iPod)
-file   --rw--  vidaone gpb     VidaOne GPS for Pocket PC (.gpb)
-file   rwrwrw  vitosmt smt     Vito Navigator II tracks
-file   --r---  vitovtt vtt     Vito SmartMap tracks (.vtt)
-file   r-----  wfff    xml     WiFiFoFum 2.0 for PocketPC XML
 file   r-r---  wintec_tes      tes     Wintec TES file
 file   --r---  wbt-bin bin     Wintec WBT-100/200 Binary File Format
 serial r-r---  wbt             Wintec WBT-100/200 GPS Download
 file   --r---  wbt-tk1 tk1     Wintec WBT-201/G-Rays 2 Binary File Format
 serial r-r---  itracku         XAiOX iTrackU Logger
 file   rwrw--  itracku-bin     bin     XAiOX iTrackU Logger Binary File Format
-file   r-----  yahoo           Yahoo Geocode API data
index 34bab2b030f6b4ed719b63abe1928cf12a84fbbe..1afba14ea065e980a4f41a309ce793caaed7b0c7 100644 (file)
@@ -68,16 +68,6 @@ option       csv     prefer_shortnames       Use shortname instead of description    boolean                         htt
 
 option csv     datum   GPS datum (def. WGS 84) string                          https://www.gpsbabel.org/WEB_DOC_DIR/fmt_csv.html#fmt_csv_o_datum
 
-file   rwrwrw  compegps                CompeGPS data files (.wpt/.trk/.rte)    compegps
-       https://www.gpsbabel.org/WEB_DOC_DIR/fmt_compegps.html
-option compegps        deficon Default icon name       string                          https://www.gpsbabel.org/WEB_DOC_DIR/fmt_compegps.html#fmt_compegps_o_deficon
-
-option compegps        index   Index of route/track to write (if more than one in source)      integer         1               https://www.gpsbabel.org/WEB_DOC_DIR/fmt_compegps.html#fmt_compegps_o_index
-
-option compegps        radius  Give points (waypoints/route points) a default radius (proximity)       float           0               https://www.gpsbabel.org/WEB_DOC_DIR/fmt_compegps.html#fmt_compegps_o_radius
-
-option compegps        snlen   Length of generated shortnames (default 16)     integer 16      1               https://www.gpsbabel.org/WEB_DOC_DIR/fmt_compegps.html#fmt_compegps_o_snlen
-
 internal       rw----  custom          Custom "Everything" Style       xcsv
        https://www.gpsbabel.org/WEB_DOC_DIR/fmt_custom.html
 option custom  snlen   Max synthesized shortname length        integer         1               https://www.gpsbabel.org/WEB_DOC_DIR/fmt_custom.html#fmt_custom_o_snlen
@@ -236,8 +226,6 @@ option      fugawi  prefer_shortnames       Use shortname instead of description    boolean
 
 option fugawi  datum   GPS datum (def. WGS 84) string                          https://www.gpsbabel.org/WEB_DOC_DIR/fmt_fugawi.html#fmt_fugawi_o_datum
 
-file   r-r-r-  g7towin g7t     G7ToWin data files (.g7t)       g7towin
-       https://www.gpsbabel.org/WEB_DOC_DIR/fmt_g7towin.html
 file   rw----  garmin301               Garmin 301 Custom position and heartrate        xcsv
        https://www.gpsbabel.org/WEB_DOC_DIR/fmt_garmin301.html
 option garmin301       snlen   Max synthesized shortname length        integer         1               https://www.gpsbabel.org/WEB_DOC_DIR/fmt_garmin301.html#fmt_garmin301_o_snlen
@@ -304,12 +292,6 @@ option     garmin_txt      time    Read/Write time format (i.e. HH:mm:ss xx)       string                          https
 
 option garmin_txt      utc     Write timestamps with offset x to UTC time      integer         -23     +23     https://www.gpsbabel.org/WEB_DOC_DIR/fmt_garmin_txt.html#fmt_garmin_txt_o_utc
 
-file   rwrwrw  pcx     pcx     Garmin PCX5     pcx
-       https://www.gpsbabel.org/WEB_DOC_DIR/fmt_pcx.html
-option pcx     deficon Default icon name       string  Waypoint                        https://www.gpsbabel.org/WEB_DOC_DIR/fmt_pcx.html#fmt_pcx_o_deficon
-
-option pcx     cartoexploreur  Write tracks compatible with Carto Exploreur    boolean                         https://www.gpsbabel.org/WEB_DOC_DIR/fmt_pcx.html#fmt_pcx_o_cartoexploreur
-
 file   rw----  garmin_poi              Garmin POI database     xcsv
        https://www.gpsbabel.org/WEB_DOC_DIR/fmt_garmin_poi.html
 option garmin_poi      snlen   Max synthesized shortname length        integer         1               https://www.gpsbabel.org/WEB_DOC_DIR/fmt_garmin_poi.html#fmt_garmin_poi_o_snlen
@@ -488,16 +470,6 @@ option     kml     prec    Precision of coordinates, number of decimals    integer 6                       https:/
 
 file   --rw--  gnav_trl        trl     Google Navigator Tracklines (.trl)      gnav_trl
        https://www.gpsbabel.org/WEB_DOC_DIR/fmt_gnav_trl.html
-file   --rw--  gopal   trk     GoPal GPS track log (.trk)      gopal
-       https://www.gpsbabel.org/WEB_DOC_DIR/fmt_gopal.html
-option gopal   date    Complete date-free tracks with given date (YYYYMMDD).   integer                         https://www.gpsbabel.org/WEB_DOC_DIR/fmt_gopal.html#fmt_gopal_o_date
-
-option gopal   maxspeed        The maximum speed (km/h) traveling from waypoint to waypoint.   integer 200     1       1000    https://www.gpsbabel.org/WEB_DOC_DIR/fmt_gopal.html#fmt_gopal_o_maxspeed
-
-option gopal   minspeed        The minimum speed (km/h) traveling from waypoint to waypoint. Set >0 to remove duplicate waypoints      integer 0       0       999     https://www.gpsbabel.org/WEB_DOC_DIR/fmt_gopal.html#fmt_gopal_o_minspeed
-
-option gopal   clean   Cleanup common errors in trackdata      boolean 1                       https://www.gpsbabel.org/WEB_DOC_DIR/fmt_gopal.html#fmt_gopal_o_clean
-
 file   --rw--  land_air_sea    txt     GPS Tracking Key Pro text       xcsv
        https://www.gpsbabel.org/WEB_DOC_DIR/fmt_land_air_sea.html
 option land_air_sea    snlen   Max synthesized shortname length        integer         1               https://www.gpsbabel.org/WEB_DOC_DIR/fmt_land_air_sea.html#fmt_land_air_sea_o_snlen
@@ -564,24 +536,6 @@ option     gpsdrivetrack   prefer_shortnames       Use shortname instead of description    bool
 
 option gpsdrivetrack   datum   GPS datum (def. WGS 84) string                          https://www.gpsbabel.org/WEB_DOC_DIR/fmt_gpsdrivetrack.html#fmt_gpsdrivetrack_o_datum
 
-file   rw----  gpsman          GPSman  xcsv
-       https://www.gpsbabel.org/WEB_DOC_DIR/fmt_gpsman.html
-option gpsman  snlen   Max synthesized shortname length        integer         1               https://www.gpsbabel.org/WEB_DOC_DIR/fmt_gpsman.html#fmt_gpsman_o_snlen
-
-option gpsman  snwhite Allow whitespace synth. shortnames      boolean                         https://www.gpsbabel.org/WEB_DOC_DIR/fmt_gpsman.html#fmt_gpsman_o_snwhite
-
-option gpsman  snupper UPPERCASE synth. shortnames     boolean                         https://www.gpsbabel.org/WEB_DOC_DIR/fmt_gpsman.html#fmt_gpsman_o_snupper
-
-option gpsman  snunique        Make synth. shortnames unique   boolean                         https://www.gpsbabel.org/WEB_DOC_DIR/fmt_gpsman.html#fmt_gpsman_o_snunique
-
-option gpsman  urlbase Basename prepended to URL on output     string                          https://www.gpsbabel.org/WEB_DOC_DIR/fmt_gpsman.html#fmt_gpsman_o_urlbase
-
-option gpsman  prefer_shortnames       Use shortname instead of description    boolean                         https://www.gpsbabel.org/WEB_DOC_DIR/fmt_gpsman.html#fmt_gpsman_o_prefer_shortnames
-
-option gpsman  datum   GPS datum (def. WGS 84) string                          https://www.gpsbabel.org/WEB_DOC_DIR/fmt_gpsman.html#fmt_gpsman_o_datum
-
-file   rw----  gpsutil         gpsutil gpsutil
-       https://www.gpsbabel.org/WEB_DOC_DIR/fmt_gpsutil.html
 file   rwrwrw  gpx     gpx     GPX XML gpx
        https://www.gpsbabel.org/WEB_DOC_DIR/fmt_gpx.html
 option gpx     snlen   Length of generated shortnames  integer 32      1               https://www.gpsbabel.org/WEB_DOC_DIR/fmt_gpx.html#fmt_gpx_o_snlen
@@ -620,8 +574,6 @@ option      m241    csv     MTK compatible CSV output file  string                          https://www.gpsbabel.or
 
 option m241    block_size_kb   Size of blocks in KB to request from device     integer 1       1       64      https://www.gpsbabel.org/WEB_DOC_DIR/fmt_m241.html#fmt_m241_o_block_size_kb
 
-file   --r---  vpl             Honda/Acura Navigation System VP Log File Format        vpl
-       https://www.gpsbabel.org/WEB_DOC_DIR/fmt_vpl.html
 file   -w----  html    html    HTML Output     html
        https://www.gpsbabel.org/WEB_DOC_DIR/fmt_html.html
 option html    stylesheet      Path to HTML style sheet        string                          https://www.gpsbabel.org/WEB_DOC_DIR/fmt_html.html#fmt_html_o_stylesheet
@@ -690,10 +642,6 @@ option     random  seed    Starting seed of the internal number generator  integer         1               ht
 
 option random  nodelay Output realtime points without delay    boolean                         https://www.gpsbabel.org/WEB_DOC_DIR/fmt_random.html#fmt_random_o_nodelay
 
-file   --rw--  jtr     jtr     Jelbert GeoTagger data file     jtr
-       https://www.gpsbabel.org/WEB_DOC_DIR/fmt_jtr.html
-file   --r---  jogmap  xml     Jogmap.de XML format    jogmap
-       https://www.gpsbabel.org/WEB_DOC_DIR/fmt_jogmap.html
 file   --rw--  kompass_tk      wp      Kompass (DAV) Track (.tk)       xcsv
        https://www.gpsbabel.org/WEB_DOC_DIR/fmt_kompass_tk.html
 option kompass_tk      snlen   Max synthesized shortname length        integer         1               https://www.gpsbabel.org/WEB_DOC_DIR/fmt_kompass_tk.html#fmt_kompass_tk_o_snlen
@@ -744,12 +692,6 @@ option     lowranceusr     serialnum       (USR output) Device serial number       integer 0                       https
 
 option lowranceusr     description     (USR output) Output file content description    string                          https://www.gpsbabel.org/WEB_DOC_DIR/fmt_lowranceusr.html#fmt_lowranceusr_o_description
 
-file   rw----  maggeo  gs      Magellan Explorist Geocaching   maggeo
-       https://www.gpsbabel.org/WEB_DOC_DIR/fmt_maggeo.html
-file   rwrwrw  mapsend         Magellan Mapsend        mapsend
-       https://www.gpsbabel.org/WEB_DOC_DIR/fmt_mapsend.html
-option mapsend trkver  MapSend version TRK file to generate (3,4)      integer 4       3       4       https://www.gpsbabel.org/WEB_DOC_DIR/fmt_mapsend.html#fmt_mapsend_o_trkver
-
 file   rwrwrw  magellanx       upt     Magellan SD files (as for eXplorist)    magellanx
        https://www.gpsbabel.org/WEB_DOC_DIR/fmt_magellanx.html
 option magellanx       deficon Default icon name       string                          https://www.gpsbabel.org/WEB_DOC_DIR/fmt_magellanx.html#fmt_magellanx_o_deficon
@@ -964,10 +906,6 @@ file       r-----  navicache               Navicache.com XML       navicache
        https://www.gpsbabel.org/WEB_DOC_DIR/fmt_navicache.html
 option navicache       noretired       Suppress retired geocaches      boolean                         https://www.gpsbabel.org/WEB_DOC_DIR/fmt_navicache.html#fmt_navicache_o_noretired
 
-file   ----rw  nmn4    rte     Navigon Mobile Navigator .rte files     nmn4
-       https://www.gpsbabel.org/WEB_DOC_DIR/fmt_nmn4.html
-option nmn4    index   Index of route to write (if more than one in source)    integer         1               https://www.gpsbabel.org/WEB_DOC_DIR/fmt_nmn4.html#fmt_nmn4_o_index
-
 file   rw----  navigonwpt              Navigon Waypoints       xcsv
        https://www.gpsbabel.org/WEB_DOC_DIR/fmt_navigonwpt.html
 option navigonwpt      snlen   Max synthesized shortname length        integer         1               https://www.gpsbabel.org/WEB_DOC_DIR/fmt_navigonwpt.html#fmt_navigonwpt_o_snlen
@@ -1098,12 +1036,6 @@ option   ozi     proxunit        Unit used in proximity values   string  miles                   https://www.gps
 
 option ozi     codec   codec to use for reading and writing strings (default windows-1252)     string  windows-1252                    https://www.gpsbabel.org/WEB_DOC_DIR/fmt_ozi.html#fmt_ozi_o_codec
 
-file   --rw--  pocketfms_bc            PocketFMS breadcrumbs   pocketfms_bc
-       https://www.gpsbabel.org/WEB_DOC_DIR/fmt_pocketfms_bc.html
-file   r---r-  pocketfms_fp    xml     PocketFMS flightplan (.xml)     pocketfms_fp
-       https://www.gpsbabel.org/WEB_DOC_DIR/fmt_pocketfms_fp.html
-file   rw----  pocketfms_wp    txt     PocketFMS waypoints (.txt)      pocketfms_wp
-       https://www.gpsbabel.org/WEB_DOC_DIR/fmt_pocketfms_wp.html
 file   r-r---  qstarz_bl-1000          Qstarz BL-1000  qstarz_bl-1000
        https://www.gpsbabel.org/WEB_DOC_DIR/fmt_qstarz_bl-1000.html
 file   rw--rw  raymarine       rwf     Raymarine Waypoint File (.rwf)  raymarine
@@ -1142,8 +1074,6 @@ option    cup     prefer_shortnames       Use shortname instead of description    boolean                         htt
 
 option cup     datum   GPS datum (def. WGS 84) string                          https://www.gpsbabel.org/WEB_DOC_DIR/fmt_cup.html#fmt_cup_o_datum
 
-file   rwrwrw  skyforce                Skymap / KMD150 ascii files     skyforce
-       https://www.gpsbabel.org/WEB_DOC_DIR/fmt_skyforce.html
 serial r-r---  skytraq         SkyTraq Venus based loggers (download)  skytraq
        https://www.gpsbabel.org/WEB_DOC_DIR/fmt_skytraq.html
 option skytraq erase   Erase device data after download        boolean 0                       https://www.gpsbabel.org/WEB_DOC_DIR/fmt_skytraq.html#fmt_skytraq_o_erase
@@ -1190,14 +1120,6 @@ option   subrip  gps_date        GPS date at position video_time (yyyymmdd, default is fir
 
 option subrip  format  Format for subtitles    string  %s km/h %e m\n%t %l                     https://www.gpsbabel.org/WEB_DOC_DIR/fmt_subrip.html#fmt_subrip_o_format
 
-file   --rwrw  stmsdf  sdf     Suunto Trek Manager (STM) .sdf files    stmsdf
-       https://www.gpsbabel.org/WEB_DOC_DIR/fmt_stmsdf.html
-option stmsdf  index   Index of route (if more than one in source)     integer 1       1               https://www.gpsbabel.org/WEB_DOC_DIR/fmt_stmsdf.html#fmt_stmsdf_o_index
-
-file   rwrwrw  stmwpp  txt     Suunto Trek Manager (STM) WaypointPlus files    stmwpp
-       https://www.gpsbabel.org/WEB_DOC_DIR/fmt_stmwpp.html
-option stmwpp  index   Index of route/track to write (if more than one in source)      integer         1               https://www.gpsbabel.org/WEB_DOC_DIR/fmt_stmwpp.html#fmt_stmwpp_o_index
-
 file   rwrw--  xol     xol     Swiss Map 25/50/100 (.xol)      xol
        https://www.gpsbabel.org/WEB_DOC_DIR/fmt_xol.html
 file   rw----  openoffice              Tab delimited fields useful for OpenOffice      xcsv
@@ -1286,32 +1208,6 @@ file     rwrw--  dmtlog  trl     TrackLogs digital mapping (.trl)        dmtlog
        https://www.gpsbabel.org/WEB_DOC_DIR/fmt_dmtlog.html
 option dmtlog  index   Index of track (if more than one in source)     integer 1       1               https://www.gpsbabel.org/WEB_DOC_DIR/fmt_dmtlog.html#fmt_dmtlog_o_index
 
-file   rw----  tiger           U.S. Census Bureau Tiger Mapping Service        tiger
-       https://www.gpsbabel.org/WEB_DOC_DIR/fmt_tiger.html
-option tiger   nolabels        Suppress labels on generated pins       boolean                         https://www.gpsbabel.org/WEB_DOC_DIR/fmt_tiger.html#fmt_tiger_o_nolabels
-
-option tiger   genurl  Generate file with lat/lon for centering map    outfile                         https://www.gpsbabel.org/WEB_DOC_DIR/fmt_tiger.html#fmt_tiger_o_genurl
-
-option tiger   margin  Margin for map.  Degrees or percentage  float   15%                     https://www.gpsbabel.org/WEB_DOC_DIR/fmt_tiger.html#fmt_tiger_o_margin
-
-option tiger   snlen   Max shortname length when used with -s  integer 10      1               https://www.gpsbabel.org/WEB_DOC_DIR/fmt_tiger.html#fmt_tiger_o_snlen
-
-option tiger   oldthresh       Days after which points are considered old      integer 14                      https://www.gpsbabel.org/WEB_DOC_DIR/fmt_tiger.html#fmt_tiger_o_oldthresh
-
-option tiger   oldmarker       Marker type for old points      string  redpin                  https://www.gpsbabel.org/WEB_DOC_DIR/fmt_tiger.html#fmt_tiger_o_oldmarker
-
-option tiger   newmarker       Marker type for new points      string  greenpin                        https://www.gpsbabel.org/WEB_DOC_DIR/fmt_tiger.html#fmt_tiger_o_newmarker
-
-option tiger   suppresswhite   Suppress whitespace in generated shortnames     boolean                         https://www.gpsbabel.org/WEB_DOC_DIR/fmt_tiger.html#fmt_tiger_o_suppresswhite
-
-option tiger   unfoundmarker   Marker type for unfound points  string  bluepin                 https://www.gpsbabel.org/WEB_DOC_DIR/fmt_tiger.html#fmt_tiger_o_unfoundmarker
-
-option tiger   xpixels Width in pixels of map  integer 768                     https://www.gpsbabel.org/WEB_DOC_DIR/fmt_tiger.html#fmt_tiger_o_xpixels
-
-option tiger   ypixels Height in pixels of map integer 768                     https://www.gpsbabel.org/WEB_DOC_DIR/fmt_tiger.html#fmt_tiger_o_ypixels
-
-option tiger   iconismarker    The icon description is already the marker      boolean                         https://www.gpsbabel.org/WEB_DOC_DIR/fmt_tiger.html#fmt_tiger_o_iconismarker
-
 file   rwrwrw  unicsv          Universal csv with field structure in first line        unicsv
        https://www.gpsbabel.org/WEB_DOC_DIR/fmt_unicsv.html
 option unicsv  datum   GPS datum (def. WGS 84) string  WGS 84                  https://www.gpsbabel.org/WEB_DOC_DIR/fmt_unicsv.html#fmt_unicsv_o_datum
@@ -1334,26 +1230,6 @@ file     -w----  vcard   vcf     Vcard Output (for iPod) vcard
        https://www.gpsbabel.org/WEB_DOC_DIR/fmt_vcard.html
 option vcard   encrypt Encrypt hints using ROT13       boolean                         https://www.gpsbabel.org/WEB_DOC_DIR/fmt_vcard.html#fmt_vcard_o_encrypt
 
-file   --rw--  vidaone gpb     VidaOne GPS for Pocket PC (.gpb)        vidaone
-       https://www.gpsbabel.org/WEB_DOC_DIR/fmt_vidaone.html
-option vidaone ver     Version of VidaOne file to read or write (1 or 2)       integer 1       1       2       https://www.gpsbabel.org/WEB_DOC_DIR/fmt_vidaone.html#fmt_vidaone_o_ver
-
-file   rwrwrw  vitosmt smt     Vito Navigator II tracks        vitosmt
-       https://www.gpsbabel.org/WEB_DOC_DIR/fmt_vitosmt.html
-file   --r---  vitovtt vtt     Vito SmartMap tracks (.vtt)     vitovtt
-       https://www.gpsbabel.org/WEB_DOC_DIR/fmt_vitovtt.html
-file   r-----  wfff    xml     WiFiFoFum 2.0 for PocketPC XML  wfff
-       https://www.gpsbabel.org/WEB_DOC_DIR/fmt_wfff.html
-option wfff    aicicon Infrastructure closed icon name string  Red Square                      https://www.gpsbabel.org/WEB_DOC_DIR/fmt_wfff.html#fmt_wfff_o_aicicon
-
-option wfff    aioicon Infrastructure open icon name   string  Green Square                    https://www.gpsbabel.org/WEB_DOC_DIR/fmt_wfff.html#fmt_wfff_o_aioicon
-
-option wfff    ahcicon Ad-hoc closed icon name string  Red Diamond                     https://www.gpsbabel.org/WEB_DOC_DIR/fmt_wfff.html#fmt_wfff_o_ahcicon
-
-option wfff    ahoicon Ad-hoc open icon name   string  Green Diamond                   https://www.gpsbabel.org/WEB_DOC_DIR/fmt_wfff.html#fmt_wfff_o_ahoicon
-
-option wfff    snmac   Shortname is MAC address        boolean                         https://www.gpsbabel.org/WEB_DOC_DIR/fmt_wfff.html#fmt_wfff_o_snmac
-
 file   r-r---  wintec_tes      tes     Wintec TES file wintec_tes
        https://www.gpsbabel.org/WEB_DOC_DIR/fmt_wintec_tes.html
 file   --r---  wbt-bin bin     Wintec WBT-100/200 Binary File Format   wbt-bin
@@ -1376,7 +1252,3 @@ option    itracku-bin     backup  Appends the input to a backup file      string                          https://w
 
 option itracku-bin     new     Only waypoints that are not the backup file     string                          https://www.gpsbabel.org/WEB_DOC_DIR/fmt_itracku-bin.html#fmt_itracku-bin_o_new
 
-file   r-----  yahoo           Yahoo Geocode API data  yahoo
-       https://www.gpsbabel.org/WEB_DOC_DIR/fmt_yahoo.html
-option yahoo   addrsep String to separate concatenated address fields (default=", ")   string  ,                       https://www.gpsbabel.org/WEB_DOC_DIR/fmt_yahoo.html#fmt_yahoo_o_addrsep
-
diff --git a/reference/gopal-11-gpx.gpx b/reference/gopal-11-gpx.gpx
deleted file mode 100644 (file)
index 628dd04..0000000
+++ /dev/null
@@ -1,134 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<gpx version="1.0" creator="GPSBabel - https://www.gpsbabel.org" xmlns="http://www.topografix.com/GPX/1/0">
-  <time>1970-01-01T00:00:00Z</time>
-  <bounds minlat="50.307048000" minlon="8.231283000" maxlat="50.309623000" maxlon="8.232662000"/>
-  <wpt lat="50.307048000" lon="8.232662000">
-    <ele>341.950</ele>
-    <time>2009-11-06T21:32:32.529Z</time>
-    <name>RPT001</name>
-    <cmt>RPT001</cmt>
-    <desc>RPT001</desc>
-    <fix>2d</fix>
-    <sat>11</sat>
-    <hdop>0.766000</hdop>
-  </wpt>
-  <wpt lat="50.307475000" lon="8.232442000">
-    <ele>341.990</ele>
-    <time>2009-11-06T21:32:33.530Z</time>
-    <name>RPT002</name>
-    <cmt>RPT002</cmt>
-    <desc>RPT002</desc>
-    <fix>2d</fix>
-    <sat>11</sat>
-    <hdop>0.766000</hdop>
-  </wpt>
-  <wpt lat="50.307902000" lon="8.232223000">
-    <ele>341.813</ele>
-    <time>2009-11-06T21:32:34.531Z</time>
-    <name>RPT003</name>
-    <cmt>RPT003</cmt>
-    <desc>RPT003</desc>
-    <fix>2d</fix>
-    <sat>10</sat>
-    <hdop>0.832000</hdop>
-  </wpt>
-  <wpt lat="50.308332000" lon="8.232000000">
-    <ele>341.493</ele>
-    <time>2009-11-06T21:32:35.532Z</time>
-    <name>RPT004</name>
-    <cmt>RPT004</cmt>
-    <desc>RPT004</desc>
-    <fix>2d</fix>
-    <sat>11</sat>
-    <hdop>0.766000</hdop>
-  </wpt>
-  <wpt lat="50.308765000" lon="8.231770000">
-    <ele>341.150</ele>
-    <time>2009-11-06T21:32:36.533Z</time>
-    <name>RPT005</name>
-    <cmt>RPT005</cmt>
-    <desc>RPT005</desc>
-    <fix>2d</fix>
-    <sat>11</sat>
-    <hdop>0.766000</hdop>
-  </wpt>
-  <wpt lat="50.309198000" lon="8.231532000">
-    <ele>340.210</ele>
-    <time>2009-11-06T21:32:37.534Z</time>
-    <name>RPT006</name>
-    <cmt>RPT006</cmt>
-    <desc>RPT006</desc>
-    <fix>2d</fix>
-    <sat>11</sat>
-    <hdop>0.766000</hdop>
-  </wpt>
-  <wpt lat="50.309623000" lon="8.231283000">
-    <ele>339.163</ele>
-    <time>2009-11-06T21:32:38.535Z</time>
-    <name>RPT007</name>
-    <cmt>RPT007</cmt>
-    <desc>RPT007</desc>
-    <fix>2d</fix>
-    <sat>11</sat>
-    <hdop>0.766000</hdop>
-  </wpt>
-  <rte>
-    <name>Tracklog 1970-01-01T00:00:00Z</name>
-    <rtept lat="50.307048000" lon="8.232662000">
-      <ele>341.950</ele>
-      <time>2009-11-06T21:32:32.529Z</time>
-      <name>RPT001</name>
-      <fix>2d</fix>
-      <sat>11</sat>
-      <hdop>0.766000</hdop>
-    </rtept>
-    <rtept lat="50.307475000" lon="8.232442000">
-      <ele>341.990</ele>
-      <time>2009-11-06T21:32:33.530Z</time>
-      <name>RPT002</name>
-      <fix>2d</fix>
-      <sat>11</sat>
-      <hdop>0.766000</hdop>
-    </rtept>
-    <rtept lat="50.307902000" lon="8.232223000">
-      <ele>341.813</ele>
-      <time>2009-11-06T21:32:34.531Z</time>
-      <name>RPT003</name>
-      <fix>2d</fix>
-      <sat>10</sat>
-      <hdop>0.832000</hdop>
-    </rtept>
-    <rtept lat="50.308332000" lon="8.232000000">
-      <ele>341.493</ele>
-      <time>2009-11-06T21:32:35.532Z</time>
-      <name>RPT004</name>
-      <fix>2d</fix>
-      <sat>11</sat>
-      <hdop>0.766000</hdop>
-    </rtept>
-    <rtept lat="50.308765000" lon="8.231770000">
-      <ele>341.150</ele>
-      <time>2009-11-06T21:32:36.533Z</time>
-      <name>RPT005</name>
-      <fix>2d</fix>
-      <sat>11</sat>
-      <hdop>0.766000</hdop>
-    </rtept>
-    <rtept lat="50.309198000" lon="8.231532000">
-      <ele>340.210</ele>
-      <time>2009-11-06T21:32:37.534Z</time>
-      <name>RPT006</name>
-      <fix>2d</fix>
-      <sat>11</sat>
-      <hdop>0.766000</hdop>
-    </rtept>
-    <rtept lat="50.309623000" lon="8.231283000">
-      <ele>339.163</ele>
-      <time>2009-11-06T21:32:38.535Z</time>
-      <name>RPT007</name>
-      <fix>2d</fix>
-      <sat>11</sat>
-      <hdop>0.766000</hdop>
-    </rtept>
-  </rte>
-</gpx>
diff --git a/reference/gopal-11.trk b/reference/gopal-11.trk
deleted file mode 100644 (file)
index f3d8da6..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
-38528677, 213232, 8.232662, 50.307048, 341.95, 180.227, 2, 0.766000, 11, 20091106, 0, 300
-38529696, 213233, 8.232442, 50.307475, 341.99, 179.174, 2, 0.766000, 11, 20091106, 0, 298
-38530720, 213234, 8.232223, 50.307902, 341.813, 179.203, 2, 0.832000, 10, 20091106, 0, 297
-38531752, 213235, 8.232000, 50.308332, 341.493, 181.152, 2, 0.766000, 11, 20091106, 0, 295
-38532669, 213236, 8.231770, 50.308765, 341.15, 183.765, 2, 0.766000, 11, 20091106, 0, 293
-38533696, 213237, 8.231532, 50.309198, 340.21, 183.95, 2, 0.766000, 11, 20091106, 0, 292
-38534714, 213238, 8.231283, 50.309623, 339.163, 178.342, 2, 0.766000, 11, 20091106, 0, 291
diff --git a/reference/gpsutil-1.pcx b/reference/gpsutil-1.pcx
deleted file mode 100644 (file)
index 26997a3..0000000
+++ /dev/null
@@ -1,23 +0,0 @@
-H  SOFTWARE NAME & VERSION
-I  GPSU 4.20   01 REGISTERED to 'THIS FILE CREATED BY HAND FOR GPSBABEL TEST'
-S DateFormat=dd/mm/yyyy
-S Timezone=+01:00
-S Units=N,M
-S SymbolSet=0
-
-H R DATUM
-M E               WGS 84       100      0.0000000E+00   0.0000000E+00  0       0       0
-
-H  COORDINATE SYSTEM
-U  LAT LON DM
-
-F      ID----  Latitude        Longitude       T       O       Comment
-W      GCEBB   N35°58.3220'    W087°08.0820'   I       E       Mountain Bike Heaven by susy1313
-W      GC1A37  N36°05.4410'    W086°40.7730'   I       E       The Troll by a182pilot & Family
-W      GC1C2B  N35°59.7760'    W086°37.2070'   I       E       Dive Bomber by JoGPS & family
-W      GC25A9  N36°02.3090'    W086°38.9170'   I       E       FOSTER by JoGPS & Family
-W      GC2723  N36°06.7310'    W086°44.5060'   I       E       Logan Lighthouse by JoGps & Family
-W      GC2B71  N36°03.8450'    W086°47.4310'   I       E       Ganier Cache by Susy1313
-W      GC309F  N36°05.2660'    W086°48.5840'   I       E       Shy's Hill by FireFighterEng33
-W      GC317A  N36°03.4500'    W086°53.5200'   I       E       GittyUp by JoGPS / Warner Parks
-W      GC317D  N36°04.9680'    W086°52.0370'   I       E       Inlighting by JoGPS / Warner Parks
index 9f25ceb8e753a386c9a38fe245593bb9ab6ce0be..6d443e3ab467fd96bf834a2e267e189852ee02c9 100644 (file)
@@ -50,11 +50,6 @@ File Types (-i and -o options):
          urlbase               Basename prepended to URL on output 
          prefer_shortnames     (0/1) Use shortname instead of description 
          datum                 GPS datum (def. WGS 84) 
-       compegps              CompeGPS data files (.wpt/.trk/.rte)
-         deficon               Default icon name 
-         index                 Index of route/track to write (if more than one in 
-         radius                Give points (waypoints/route points) a default rad 
-         snlen                 Length of generated shortnames (default 16) 
        iblue747              Data Logger iBlue747 csv
          snlen                 Max synthesized shortname length 
          snwhite               (0/1) Allow whitespace synth. shortnames 
@@ -126,7 +121,6 @@ File Types (-i and -o options):
          urlbase               Basename prepended to URL on output 
          prefer_shortnames     (0/1) Use shortname instead of description 
          datum                 GPS datum (def. WGS 84) 
-       g7towin               G7ToWin data files (.g7t)
        garmin301             Garmin 301 Custom position and heartrate
          snlen                 Max synthesized shortname length 
          snwhite               (0/1) Allow whitespace synth. shortnames 
@@ -160,9 +154,6 @@ File Types (-i and -o options):
          temp                  Temperature unit [c=Celsius, f=Fahrenheit] 
          time                  Read/Write time format (i.e. HH:mm:ss xx) 
          utc                   Write timestamps with offset x to UTC time 
-       pcx                   Garmin PCX5
-         deficon               Default icon name 
-         cartoexploreur        (0/1) Write tracks compatible with Carto Exploreur 
        garmin_poi            Garmin POI database
          snlen                 Max synthesized shortname length 
          snwhite               (0/1) Allow whitespace synth. shortnames 
@@ -246,11 +237,6 @@ File Types (-i and -o options):
          rotate_colors         Rotate colors for tracks and routes (default autom 
          prec                  Precision of coordinates, number of decimals 
        gnav_trl              Google Navigator Tracklines (.trl)
-       gopal                 GoPal GPS track log (.trk)
-         date                  Complete date-free tracks with given date (YYYYMMD 
-         maxspeed              The maximum speed (km/h) traveling from waypoint t 
-         minspeed              The minimum speed (km/h) traveling from waypoint t 
-         clean                 (0/1) Cleanup common errors in trackdata 
        land_air_sea          GPS Tracking Key Pro text
          snlen                 Max synthesized shortname length 
          snwhite               (0/1) Allow whitespace synth. shortnames 
@@ -284,15 +270,6 @@ File Types (-i and -o options):
          urlbase               Basename prepended to URL on output 
          prefer_shortnames     (0/1) Use shortname instead of description 
          datum                 GPS datum (def. WGS 84) 
-       gpsman                GPSman
-         snlen                 Max synthesized shortname length 
-         snwhite               (0/1) Allow whitespace synth. shortnames 
-         snupper               (0/1) UPPERCASE synth. shortnames 
-         snunique              (0/1) Make synth. shortnames unique 
-         urlbase               Basename prepended to URL on output 
-         prefer_shortnames     (0/1) Use shortname instead of description 
-         datum                 GPS datum (def. WGS 84) 
-       gpsutil               gpsutil
        gpx                   GPX XML
          snlen                 Length of generated shortnames 
          suppresswhite         (0/1) No whitespace in generated shortnames 
@@ -312,7 +289,6 @@ File Types (-i and -o options):
          log_enable            (0/1) Enable logging after download 
          csv                   MTK compatible CSV output file 
          block_size_kb         Size of blocks in KB to request from device 
-       vpl                   Honda/Acura Navigation System VP Log File Format
        html                  HTML Output
          stylesheet            Path to HTML style sheet 
          encrypt               (0/1) Encrypt hints using ROT13 
@@ -343,8 +319,6 @@ File Types (-i and -o options):
          tracknum              Track identification number 
          title                 Track title 
          description           Track description 
-       jtr                   Jelbert GeoTagger data file
-       jogmap                Jogmap.de XML format
        kompass_tk            Kompass (DAV) Track (.tk)
          snlen                 Max synthesized shortname length 
          snwhite               (0/1) Allow whitespace synth. shortnames 
@@ -370,9 +344,6 @@ File Types (-i and -o options):
          title                 (USR output) Output file title string 
          serialnum             (USR output) Device serial number 
          description           (USR output) Output file content description 
-       maggeo                Magellan Explorist Geocaching
-       mapsend               Magellan Mapsend
-         trkver                MapSend version TRK file to generate (3,4) 
        magellanx             Magellan SD files (as for eXplorist)
          deficon               Default icon name 
          maxcmts               Max number of comments to write (maxcmts=200) 
@@ -480,8 +451,6 @@ File Types (-i and -o options):
        tpo3                  National Geographic Topo 3.x/4.x .tpo
        navicache             Navicache.com XML
          noretired             (0/1) Suppress retired geocaches 
-       nmn4                  Navigon Mobile Navigator .rte files
-         index                 Index of route to write (if more than one in sourc 
        navigonwpt            Navigon Waypoints
          snlen                 Max synthesized shortname length 
          snwhite               (0/1) Allow whitespace synth. shortnames 
@@ -547,9 +516,6 @@ File Types (-i and -o options):
          altunit               Unit used in altitude values 
          proxunit              Unit used in proximity values 
          codec                 codec to use for reading and writing strings (defa 
-       pocketfms_bc          PocketFMS breadcrumbs
-       pocketfms_fp          PocketFMS flightplan (.xml)
-       pocketfms_wp          PocketFMS waypoints (.txt)
        qstarz_bl-1000        Qstarz BL-1000
        raymarine             Raymarine Waypoint File (.rwf)
          location              Default location 
@@ -569,7 +535,6 @@ File Types (-i and -o options):
          urlbase               Basename prepended to URL on output 
          prefer_shortnames     (0/1) Use shortname instead of description 
          datum                 GPS datum (def. WGS 84) 
-       skyforce              Skymap / KMD150 ascii files
        skytraq               SkyTraq Venus based loggers (download)
          erase                 (0/1) Erase device data after download 
          targetlocation        Set location finder target location as lat,lng 
@@ -593,10 +558,6 @@ File Types (-i and -o options):
          gps_time              GPS time at position video_time (hhmmss[.sss], def 
          gps_date              GPS date at position video_time (yyyymmdd, default 
          format                Format for subtitles 
-       stmsdf                Suunto Trek Manager (STM) .sdf files
-         index                 Index of route (if more than one in source) 
-       stmwpp                Suunto Trek Manager (STM) WaypointPlus files
-         index                 Index of route/track to write (if more than one in 
        xol                   Swiss Map 25/50/100 (.xol)
        openoffice            Tab delimited fields useful for OpenOffice
          snlen                 Max synthesized shortname length 
@@ -641,19 +602,6 @@ File Types (-i and -o options):
        tomtom                TomTom POI file (.ov2)
        dmtlog                TrackLogs digital mapping (.trl)
          index                 Index of track (if more than one in source) 
-       tiger                 U.S. Census Bureau Tiger Mapping Service
-         nolabels              (0/1) Suppress labels on generated pins 
-         genurl                Generate file with lat/lon for centering map 
-         margin                Margin for map.  Degrees or percentage 
-         snlen                 Max shortname length when used with -s 
-         oldthresh             Days after which points are considered old 
-         oldmarker             Marker type for old points 
-         newmarker             Marker type for new points 
-         suppresswhite         (0/1) Suppress whitespace in generated shortnames 
-         unfoundmarker         Marker type for unfound points 
-         xpixels               Width in pixels of map 
-         ypixels               Height in pixels of map 
-         iconismarker          (0/1) The icon description is already the marker 
        unicsv                Universal csv with field structure in first line
          datum                 GPS datum (def. WGS 84) 
          grid                  Write position using this grid. 
@@ -664,16 +612,6 @@ File Types (-i and -o options):
          codec                 codec to use for reading and writing strings (defa 
        vcard                 Vcard Output (for iPod)
          encrypt               (0/1) Encrypt hints using ROT13 
-       vidaone               VidaOne GPS for Pocket PC (.gpb)
-         ver                   Version of VidaOne file to read or write (1 or 2) 
-       vitosmt               Vito Navigator II tracks
-       vitovtt               Vito SmartMap tracks (.vtt)
-       wfff                  WiFiFoFum 2.0 for PocketPC XML
-         aicicon               Infrastructure closed icon name 
-         aioicon               Infrastructure open icon name 
-         ahcicon               Ad-hoc closed icon name 
-         ahoicon               Ad-hoc open icon name 
-         snmac                 (0/1) Shortname is MAC address 
        wintec_tes            Wintec TES file
        wbt-bin               Wintec WBT-100/200 Binary File Format
        wbt                   Wintec WBT-100/200 GPS Download
@@ -685,8 +623,6 @@ File Types (-i and -o options):
        itracku-bin           XAiOX iTrackU Logger Binary File Format
          backup                Appends the input to a backup file 
          new                   Only waypoints that are not the backup file 
-       yahoo                 Yahoo Geocode API data
-         addrsep               String to separate concatenated address fields (de 
 
 Supported data filters:
        arc                   Include Only Points Within Distance of Arc        
diff --git a/reference/ov2-in.ref b/reference/ov2-in.ref
deleted file mode 100644 (file)
index 8ce96c6..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
-Mountain 3558.322N 08708.081W 0000000m Mountain Bike Heaven by susy13 a
-The Trol 3605.441N 08640.772W 0000000m The Troll by a182pilot & Famil a
-Dive Bom 3559.776N 08637.207W 0000000m Dive Bomber by JoGPS & family  a
-FOSTER b 3602.309N 08638.917W 0000000m FOSTER by JoGPS & Family       a
-Logan Li 3606.731N 08644.506W 0000000m Logan Lighthouse by JoGps & Fa a
-Ganier C 3603.845N 08647.431W 0000000m Ganier Cache by Susy1313       a
-Shy's Hi 3605.266N 08648.583W 0000000m Shy's Hill by FireFighterEng33 a
-GittyUp  3603.450N 08653.519W 0000000m GittyUp by JoGPS / Warner Park a
-Inlighti 3604.968N 08652.036W 0000000m Inlighting by JoGPS / Warner P a
diff --git a/reference/pocketfms_bc b/reference/pocketfms_bc
deleted file mode 100644 (file)
index 40e8401..0000000
Binary files a/reference/pocketfms_bc and /dev/null differ
diff --git a/reference/pocketfms_bc.babel b/reference/pocketfms_bc.babel
deleted file mode 100644 (file)
index b5ba84d..0000000
Binary files a/reference/pocketfms_bc.babel and /dev/null differ
diff --git a/reference/pocketfms_bc.gpx b/reference/pocketfms_bc.gpx
deleted file mode 100644 (file)
index e6a1c9a..0000000
+++ /dev/null
@@ -1,2288 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<gpx version="1.0" creator="GPSBabel - https://www.gpsbabel.org" xmlns="http://www.topografix.com/GPX/1/0">
-  <time>1970-01-01T00:00:00Z</time>
-  <bounds minlat="51.157424927" minlon="14.946011543" maxlat="51.170711517" maxlon="14.964761734"/>
-  <trk>
-    <name>PocketFMS</name>
-    <desc>Breadcrumb</desc>
-    <url>www.pocketfms.com</url>
-    <number>1</number>
-    <trkseg>
-      <trkpt lat="51.160198212" lon="14.946299553">
-        <ele>-0.304800</ele>
-        <time>2007-08-19T12:51:57Z</time>
-        <fix>none</fix>
-      </trkpt>
-      <trkpt lat="51.160198212" lon="14.946299553">
-        <ele>-0.304800</ele>
-        <time>2007-08-19T12:51:58Z</time>
-        <fix>none</fix>
-      </trkpt>
-      <trkpt lat="51.160198212" lon="14.946299553">
-        <ele>-0.304800</ele>
-        <time>2007-08-19T12:51:59Z</time>
-        <fix>none</fix>
-      </trkpt>
-      <trkpt lat="51.160198212" lon="14.946299553">
-        <ele>-0.304800</ele>
-        <time>2007-08-19T12:52:00Z</time>
-        <fix>none</fix>
-      </trkpt>
-      <trkpt lat="51.160198212" lon="14.946299553">
-        <ele>-0.304800</ele>
-        <time>2007-08-19T12:52:01Z</time>
-        <fix>none</fix>
-      </trkpt>
-      <trkpt lat="51.160198212" lon="14.946299553">
-        <ele>-0.304800</ele>
-        <time>2007-08-19T12:52:03Z</time>
-        <fix>none</fix>
-      </trkpt>
-      <trkpt lat="51.160198212" lon="14.946299553">
-        <ele>-0.304800</ele>
-        <time>2007-08-19T12:52:04Z</time>
-        <fix>none</fix>
-      </trkpt>
-      <trkpt lat="51.160198212" lon="14.946299553">
-        <ele>-0.304800</ele>
-        <time>2007-08-19T12:52:05Z</time>
-        <fix>none</fix>
-      </trkpt>
-      <trkpt lat="51.160198212" lon="14.946299553">
-        <ele>-0.304800</ele>
-        <time>2007-08-19T12:52:06Z</time>
-        <fix>none</fix>
-      </trkpt>
-      <trkpt lat="51.160198212" lon="14.946299553">
-        <ele>-0.304800</ele>
-        <time>2007-08-19T12:52:07Z</time>
-        <fix>none</fix>
-      </trkpt>
-      <trkpt lat="51.160198212" lon="14.946299553">
-        <ele>-0.304800</ele>
-        <time>2007-08-19T12:52:08Z</time>
-        <fix>none</fix>
-      </trkpt>
-      <trkpt lat="51.160198212" lon="14.946299553">
-        <ele>-0.304800</ele>
-        <time>2007-08-19T12:52:10Z</time>
-        <fix>none</fix>
-      </trkpt>
-      <trkpt lat="51.160198212" lon="14.946299553">
-        <ele>-0.304800</ele>
-        <time>2007-08-19T12:52:11Z</time>
-        <fix>none</fix>
-      </trkpt>
-      <trkpt lat="51.160198212" lon="14.946299553">
-        <ele>-0.304800</ele>
-        <time>2007-08-19T12:52:12Z</time>
-        <fix>none</fix>
-      </trkpt>
-      <trkpt lat="51.160198212" lon="14.946299553">
-        <ele>-0.304800</ele>
-        <time>2007-08-19T12:52:13Z</time>
-        <fix>none</fix>
-      </trkpt>
-      <trkpt lat="51.160198212" lon="14.946299553">
-        <ele>-0.304800</ele>
-        <time>2007-08-19T12:52:14Z</time>
-        <fix>none</fix>
-      </trkpt>
-      <trkpt lat="51.160198212" lon="14.946299553">
-        <ele>-0.304800</ele>
-        <time>2007-08-19T12:52:15Z</time>
-        <fix>none</fix>
-      </trkpt>
-      <trkpt lat="51.160198212" lon="14.946299553">
-        <ele>-0.304800</ele>
-        <time>2007-08-19T12:52:16Z</time>
-        <fix>none</fix>
-      </trkpt>
-      <trkpt lat="51.160198212" lon="14.946299553">
-        <ele>-0.304800</ele>
-        <time>2007-08-19T12:52:17Z</time>
-        <fix>none</fix>
-      </trkpt>
-      <trkpt lat="51.160198212" lon="14.946299553">
-        <ele>-0.304800</ele>
-        <time>2007-08-19T12:52:18Z</time>
-        <fix>none</fix>
-      </trkpt>
-      <trkpt lat="51.160198212" lon="14.946299553">
-        <ele>-0.304800</ele>
-        <time>2007-08-19T12:52:20Z</time>
-        <fix>none</fix>
-      </trkpt>
-      <trkpt lat="51.160198212" lon="14.946299553">
-        <ele>-0.304800</ele>
-        <time>2007-08-19T12:52:21Z</time>
-        <fix>none</fix>
-      </trkpt>
-      <trkpt lat="51.160198212" lon="14.946299553">
-        <ele>-0.304800</ele>
-        <time>2007-08-19T12:52:22Z</time>
-        <fix>none</fix>
-      </trkpt>
-      <trkpt lat="51.160198212" lon="14.946299553">
-        <ele>-0.304800</ele>
-        <time>2007-08-19T12:52:23Z</time>
-        <fix>none</fix>
-      </trkpt>
-      <trkpt lat="51.160198212" lon="14.946299553">
-        <ele>-0.304800</ele>
-        <time>2007-08-19T12:52:24Z</time>
-        <fix>none</fix>
-      </trkpt>
-      <trkpt lat="51.160198212" lon="14.946299553">
-        <ele>-0.304800</ele>
-        <time>2007-08-19T12:52:25Z</time>
-        <fix>none</fix>
-      </trkpt>
-      <trkpt lat="51.160198212" lon="14.946299553">
-        <ele>-0.304800</ele>
-        <time>2007-08-19T12:52:26Z</time>
-        <fix>none</fix>
-      </trkpt>
-      <trkpt lat="51.160198212" lon="14.946299553">
-        <ele>-0.304800</ele>
-        <time>2007-08-19T12:52:27Z</time>
-        <fix>none</fix>
-      </trkpt>
-      <trkpt lat="51.160198212" lon="14.946299553">
-        <ele>-0.304800</ele>
-        <time>2007-08-19T12:52:28Z</time>
-        <fix>none</fix>
-      </trkpt>
-      <trkpt lat="51.160198212" lon="14.946299553">
-        <ele>-0.304800</ele>
-        <time>2007-08-19T12:52:29Z</time>
-        <fix>none</fix>
-      </trkpt>
-      <trkpt lat="51.160198212" lon="14.946299553">
-        <ele>-0.304800</ele>
-        <time>2007-08-19T12:52:31Z</time>
-        <fix>none</fix>
-      </trkpt>
-      <trkpt lat="51.160198212" lon="14.946299553">
-        <ele>-0.304800</ele>
-        <time>2007-08-19T12:52:32Z</time>
-        <fix>none</fix>
-      </trkpt>
-      <trkpt lat="51.160198212" lon="14.946299553">
-        <ele>-0.304800</ele>
-        <time>2007-08-19T12:52:33Z</time>
-        <fix>none</fix>
-      </trkpt>
-      <trkpt lat="51.160198212" lon="14.946299553">
-        <ele>-0.304800</ele>
-        <time>2007-08-19T12:52:34Z</time>
-        <fix>none</fix>
-      </trkpt>
-      <trkpt lat="51.160198212" lon="14.946299553">
-        <ele>-0.304800</ele>
-        <time>2007-08-19T12:52:35Z</time>
-        <fix>none</fix>
-      </trkpt>
-      <trkpt lat="51.160198212" lon="14.946299553">
-        <ele>-0.304800</ele>
-        <time>2007-08-19T12:52:36Z</time>
-        <fix>none</fix>
-      </trkpt>
-      <trkpt lat="51.160198212" lon="14.946299553">
-        <ele>-0.304800</ele>
-        <time>2007-08-19T12:52:37Z</time>
-        <fix>none</fix>
-      </trkpt>
-      <trkpt lat="51.160198212" lon="14.946299553">
-        <ele>-0.304800</ele>
-        <time>2007-08-19T12:52:38Z</time>
-        <fix>none</fix>
-      </trkpt>
-      <trkpt lat="51.160198212" lon="14.946299553">
-        <ele>-0.304800</ele>
-        <time>2007-08-19T12:52:40Z</time>
-        <fix>none</fix>
-      </trkpt>
-      <trkpt lat="51.160198212" lon="14.946299553">
-        <ele>-0.304800</ele>
-        <time>2007-08-19T12:52:41Z</time>
-        <fix>none</fix>
-      </trkpt>
-      <trkpt lat="51.160198212" lon="14.946299553">
-        <ele>-0.304800</ele>
-        <time>2007-08-19T12:52:42Z</time>
-        <fix>none</fix>
-      </trkpt>
-      <trkpt lat="51.160198212" lon="14.946299553">
-        <ele>-0.304800</ele>
-        <time>2007-08-19T12:52:43Z</time>
-        <fix>none</fix>
-      </trkpt>
-      <trkpt lat="51.160198212" lon="14.946299553">
-        <ele>-0.304800</ele>
-        <time>2007-08-19T12:52:44Z</time>
-        <fix>none</fix>
-      </trkpt>
-      <trkpt lat="51.160198212" lon="14.946299553">
-        <ele>-0.304800</ele>
-        <time>2007-08-19T12:52:46Z</time>
-        <fix>none</fix>
-      </trkpt>
-      <trkpt lat="51.160198212" lon="14.946299553">
-        <ele>-0.304800</ele>
-        <time>2007-08-19T12:52:47Z</time>
-        <fix>none</fix>
-      </trkpt>
-      <trkpt lat="51.160198212" lon="14.946299553">
-        <ele>-0.304800</ele>
-        <time>2007-08-19T12:52:48Z</time>
-        <fix>none</fix>
-      </trkpt>
-      <trkpt lat="51.160198212" lon="14.946299553">
-        <ele>-0.304800</ele>
-        <time>2007-08-19T12:52:49Z</time>
-        <fix>none</fix>
-      </trkpt>
-      <trkpt lat="51.160198212" lon="14.946299553">
-        <ele>-0.304800</ele>
-        <time>2007-08-19T12:52:50Z</time>
-        <fix>none</fix>
-      </trkpt>
-      <trkpt lat="51.160198212" lon="14.946299553">
-        <ele>-0.304800</ele>
-        <time>2007-08-19T12:52:51Z</time>
-        <fix>none</fix>
-      </trkpt>
-      <trkpt lat="51.160198212" lon="14.946299553">
-        <ele>-0.304800</ele>
-        <time>2007-08-19T12:52:52Z</time>
-        <fix>none</fix>
-      </trkpt>
-      <trkpt lat="51.160198212" lon="14.946299553">
-        <ele>-0.304800</ele>
-        <time>2007-08-19T12:52:53Z</time>
-        <fix>none</fix>
-      </trkpt>
-      <trkpt lat="51.160198212" lon="14.946299553">
-        <ele>-0.304800</ele>
-        <time>2007-08-19T12:52:55Z</time>
-        <fix>none</fix>
-      </trkpt>
-      <trkpt lat="51.160198212" lon="14.946299553">
-        <ele>-0.304800</ele>
-        <time>2007-08-19T12:52:56Z</time>
-        <fix>none</fix>
-      </trkpt>
-      <trkpt lat="51.160198212" lon="14.946299553">
-        <ele>-0.304800</ele>
-        <time>2007-08-19T12:52:57Z</time>
-        <fix>none</fix>
-      </trkpt>
-      <trkpt lat="51.160198212" lon="14.946299553">
-        <ele>-0.304800</ele>
-        <time>2007-08-19T12:52:58Z</time>
-        <fix>none</fix>
-      </trkpt>
-      <trkpt lat="51.160198212" lon="14.946299553">
-        <ele>-0.304800</ele>
-        <time>2007-08-19T12:52:59Z</time>
-        <fix>none</fix>
-      </trkpt>
-      <trkpt lat="51.160198212" lon="14.946299553">
-        <ele>-0.304800</ele>
-        <time>2007-08-19T12:53:00Z</time>
-        <fix>none</fix>
-      </trkpt>
-      <trkpt lat="51.160198212" lon="14.946299553">
-        <ele>-0.304800</ele>
-        <time>2007-08-19T12:53:01Z</time>
-        <fix>none</fix>
-      </trkpt>
-      <trkpt lat="51.160198212" lon="14.946299553">
-        <ele>-0.304800</ele>
-        <time>2007-08-19T12:53:03Z</time>
-        <fix>none</fix>
-      </trkpt>
-      <trkpt lat="51.160198212" lon="14.946299553">
-        <ele>-0.304800</ele>
-        <time>2007-08-19T12:53:04Z</time>
-        <fix>none</fix>
-      </trkpt>
-      <trkpt lat="51.160198212" lon="14.946299553">
-        <ele>-0.304800</ele>
-        <time>2007-08-19T12:53:05Z</time>
-        <fix>none</fix>
-      </trkpt>
-      <trkpt lat="51.160198212" lon="14.946299553">
-        <ele>-0.304800</ele>
-        <time>2007-08-19T12:53:06Z</time>
-        <fix>none</fix>
-      </trkpt>
-      <trkpt lat="51.160198212" lon="14.946299553">
-        <ele>-0.304800</ele>
-        <time>2007-08-19T12:53:07Z</time>
-        <fix>none</fix>
-      </trkpt>
-      <trkpt lat="51.160198212" lon="14.946299553">
-        <ele>-0.304800</ele>
-        <time>2007-08-19T12:53:08Z</time>
-        <fix>none</fix>
-      </trkpt>
-      <trkpt lat="51.160198212" lon="14.946299553">
-        <ele>-0.304800</ele>
-        <time>2007-08-19T12:53:10Z</time>
-        <fix>none</fix>
-      </trkpt>
-      <trkpt lat="51.160198212" lon="14.946299553">
-        <ele>-0.304800</ele>
-        <time>2007-08-19T12:53:11Z</time>
-        <fix>none</fix>
-      </trkpt>
-      <trkpt lat="51.160198212" lon="14.946299553">
-        <ele>-0.304800</ele>
-        <time>2007-08-19T12:53:12Z</time>
-        <fix>none</fix>
-      </trkpt>
-      <trkpt lat="51.160198212" lon="14.946299553">
-        <ele>-0.304800</ele>
-        <time>2007-08-19T12:53:13Z</time>
-        <fix>none</fix>
-      </trkpt>
-      <trkpt lat="51.160198212" lon="14.946299553">
-        <ele>-0.304800</ele>
-        <time>2007-08-19T12:53:14Z</time>
-        <fix>none</fix>
-      </trkpt>
-      <trkpt lat="51.160198212" lon="14.946299553">
-        <ele>-0.304800</ele>
-        <time>2007-08-19T12:53:15Z</time>
-        <fix>none</fix>
-      </trkpt>
-      <trkpt lat="51.160198212" lon="14.946299553">
-        <ele>-0.304800</ele>
-        <time>2007-08-19T12:53:16Z</time>
-        <fix>none</fix>
-      </trkpt>
-      <trkpt lat="51.160198212" lon="14.946299553">
-        <ele>-0.304800</ele>
-        <time>2007-08-19T12:53:17Z</time>
-        <fix>none</fix>
-      </trkpt>
-      <trkpt lat="51.160198212" lon="14.946299553">
-        <ele>-0.304800</ele>
-        <time>2007-08-19T12:53:18Z</time>
-        <fix>none</fix>
-      </trkpt>
-      <trkpt lat="51.160198212" lon="14.946299553">
-        <ele>-0.304800</ele>
-        <time>2007-08-19T12:53:20Z</time>
-        <fix>none</fix>
-      </trkpt>
-      <trkpt lat="51.160198212" lon="14.946299553">
-        <ele>-0.304800</ele>
-        <time>2007-08-19T12:53:21Z</time>
-        <fix>none</fix>
-      </trkpt>
-      <trkpt lat="51.160198212" lon="14.946299553">
-        <ele>-0.304800</ele>
-        <time>2007-08-19T12:53:22Z</time>
-        <fix>none</fix>
-      </trkpt>
-      <trkpt lat="51.160198212" lon="14.946299553">
-        <ele>-0.304800</ele>
-        <time>2007-08-19T12:53:23Z</time>
-        <fix>none</fix>
-      </trkpt>
-      <trkpt lat="51.160198212" lon="14.946299553">
-        <ele>-0.304800</ele>
-        <time>2007-08-19T12:53:24Z</time>
-        <fix>none</fix>
-      </trkpt>
-      <trkpt lat="51.160198212" lon="14.946299553">
-        <ele>-0.304800</ele>
-        <time>2007-08-19T12:53:25Z</time>
-        <fix>none</fix>
-      </trkpt>
-      <trkpt lat="51.160198212" lon="14.946299553">
-        <ele>-0.304800</ele>
-        <time>2007-08-19T12:53:26Z</time>
-        <fix>none</fix>
-      </trkpt>
-      <trkpt lat="51.160198212" lon="14.946299553">
-        <ele>-0.304800</ele>
-        <time>2007-08-19T12:53:27Z</time>
-        <fix>none</fix>
-      </trkpt>
-      <trkpt lat="51.160198212" lon="14.946299553">
-        <ele>-0.304800</ele>
-        <time>2007-08-19T12:53:28Z</time>
-        <fix>none</fix>
-      </trkpt>
-      <trkpt lat="51.160198212" lon="14.946299553">
-        <ele>-0.304800</ele>
-        <time>2007-08-19T12:53:29Z</time>
-        <fix>none</fix>
-      </trkpt>
-      <trkpt lat="51.160198212" lon="14.946299553">
-        <ele>-0.304800</ele>
-        <time>2007-08-19T12:53:30Z</time>
-        <fix>none</fix>
-      </trkpt>
-      <trkpt lat="51.160198212" lon="14.946299553">
-        <ele>-0.304800</ele>
-        <time>2007-08-19T12:53:31Z</time>
-        <fix>none</fix>
-      </trkpt>
-      <trkpt lat="51.160198212" lon="14.946299553">
-        <ele>-0.304800</ele>
-        <time>2007-08-19T12:53:32Z</time>
-        <fix>none</fix>
-      </trkpt>
-      <trkpt lat="51.160198212" lon="14.946299553">
-        <ele>-0.304800</ele>
-        <time>2007-08-19T12:53:33Z</time>
-        <fix>none</fix>
-      </trkpt>
-      <trkpt lat="51.160198212" lon="14.946299553">
-        <ele>-0.304800</ele>
-        <time>2007-08-19T12:53:35Z</time>
-        <fix>none</fix>
-      </trkpt>
-      <trkpt lat="51.160198212" lon="14.946299553">
-        <ele>-0.304800</ele>
-        <time>2007-08-19T12:53:36Z</time>
-        <fix>none</fix>
-      </trkpt>
-      <trkpt lat="51.160198212" lon="14.946299553">
-        <ele>-0.304800</ele>
-        <time>2007-08-19T12:53:37Z</time>
-        <fix>none</fix>
-      </trkpt>
-      <trkpt lat="51.160198212" lon="14.946299553">
-        <ele>-0.304800</ele>
-        <time>2007-08-19T12:53:38Z</time>
-        <fix>none</fix>
-      </trkpt>
-      <trkpt lat="51.160198212" lon="14.946299553">
-        <ele>-0.304800</ele>
-        <time>2007-08-19T12:53:39Z</time>
-        <fix>none</fix>
-      </trkpt>
-      <trkpt lat="51.160198212" lon="14.946299553">
-        <ele>-0.304800</ele>
-        <time>2007-08-19T12:53:40Z</time>
-        <fix>none</fix>
-      </trkpt>
-      <trkpt lat="51.160198212" lon="14.946299553">
-        <ele>-0.304800</ele>
-        <time>2007-08-19T12:53:41Z</time>
-        <fix>none</fix>
-      </trkpt>
-      <trkpt lat="51.160198212" lon="14.946299553">
-        <ele>-0.304800</ele>
-        <time>2007-08-19T12:53:42Z</time>
-        <fix>none</fix>
-      </trkpt>
-      <trkpt lat="51.160198212" lon="14.946299553">
-        <ele>-0.304800</ele>
-        <time>2007-08-19T12:53:43Z</time>
-        <fix>none</fix>
-      </trkpt>
-      <trkpt lat="51.160198212" lon="14.946299553">
-        <ele>-0.304800</ele>
-        <time>2007-08-19T12:53:45Z</time>
-        <fix>none</fix>
-      </trkpt>
-      <trkpt lat="51.160198212" lon="14.946299553">
-        <ele>-0.304800</ele>
-        <time>2007-08-19T12:53:46Z</time>
-        <fix>none</fix>
-      </trkpt>
-      <trkpt lat="51.160198212" lon="14.946299553">
-        <ele>-0.304800</ele>
-        <time>2007-08-19T12:53:47Z</time>
-        <fix>none</fix>
-      </trkpt>
-      <trkpt lat="51.160198212" lon="14.946299553">
-        <ele>-0.304800</ele>
-        <time>2007-08-19T12:53:48Z</time>
-        <fix>none</fix>
-      </trkpt>
-      <trkpt lat="51.160198212" lon="14.946299553">
-        <ele>-0.304800</ele>
-        <time>2007-08-19T12:53:49Z</time>
-        <fix>none</fix>
-      </trkpt>
-      <trkpt lat="51.160198212" lon="14.946299553">
-        <ele>-0.304800</ele>
-        <time>2007-08-19T12:53:50Z</time>
-        <fix>none</fix>
-      </trkpt>
-      <trkpt lat="51.160198212" lon="14.946299553">
-        <ele>-0.304800</ele>
-        <time>2007-08-19T12:53:52Z</time>
-        <fix>none</fix>
-      </trkpt>
-      <trkpt lat="51.160198212" lon="14.946299553">
-        <ele>-0.304800</ele>
-        <time>2007-08-19T12:53:53Z</time>
-        <fix>none</fix>
-      </trkpt>
-      <trkpt lat="51.160198212" lon="14.946299553">
-        <ele>-0.304800</ele>
-        <time>2007-08-19T12:53:54Z</time>
-        <fix>none</fix>
-      </trkpt>
-      <trkpt lat="51.160198212" lon="14.946299553">
-        <ele>-0.304800</ele>
-        <time>2007-08-19T12:53:56Z</time>
-        <fix>none</fix>
-      </trkpt>
-      <trkpt lat="51.160198212" lon="14.946299553">
-        <ele>-0.304800</ele>
-        <time>2007-08-19T12:53:57Z</time>
-        <fix>none</fix>
-      </trkpt>
-      <trkpt lat="51.160198212" lon="14.946299553">
-        <ele>-0.304800</ele>
-        <time>2007-08-19T12:53:58Z</time>
-        <fix>none</fix>
-      </trkpt>
-      <trkpt lat="51.160198212" lon="14.946299553">
-        <ele>-0.304800</ele>
-        <time>2007-08-19T12:53:59Z</time>
-        <fix>none</fix>
-      </trkpt>
-      <trkpt lat="51.160198212" lon="14.946299553">
-        <ele>-0.304800</ele>
-        <time>2007-08-19T12:54:00Z</time>
-        <fix>none</fix>
-      </trkpt>
-      <trkpt lat="51.160198212" lon="14.946299553">
-        <ele>-0.304800</ele>
-        <time>2007-08-19T12:54:01Z</time>
-        <fix>none</fix>
-      </trkpt>
-      <trkpt lat="51.160198212" lon="14.946299553">
-        <ele>-0.304800</ele>
-        <time>2007-08-19T12:54:02Z</time>
-        <fix>none</fix>
-      </trkpt>
-      <trkpt lat="51.160198212" lon="14.946299553">
-        <ele>-0.304800</ele>
-        <time>2007-08-19T12:54:03Z</time>
-        <fix>none</fix>
-      </trkpt>
-      <trkpt lat="51.160198212" lon="14.946299553">
-        <ele>-0.304800</ele>
-        <time>2007-08-19T12:54:05Z</time>
-        <fix>none</fix>
-      </trkpt>
-      <trkpt lat="51.160198212" lon="14.946299553">
-        <ele>-0.304800</ele>
-        <time>2007-08-19T12:54:06Z</time>
-        <fix>none</fix>
-      </trkpt>
-      <trkpt lat="51.160198212" lon="14.946299553">
-        <ele>-0.304800</ele>
-        <time>2007-08-19T12:54:07Z</time>
-        <fix>none</fix>
-      </trkpt>
-      <trkpt lat="51.160198212" lon="14.946299553">
-        <ele>-0.304800</ele>
-        <time>2007-08-19T12:54:08Z</time>
-        <fix>none</fix>
-      </trkpt>
-      <trkpt lat="51.160198212" lon="14.946299553">
-        <ele>-0.304800</ele>
-        <time>2007-08-19T12:54:09Z</time>
-        <fix>none</fix>
-      </trkpt>
-      <trkpt lat="51.160198212" lon="14.946299553">
-        <ele>-0.304800</ele>
-        <time>2007-08-19T12:54:10Z</time>
-        <fix>none</fix>
-      </trkpt>
-      <trkpt lat="51.160198212" lon="14.946299553">
-        <ele>-0.304800</ele>
-        <time>2007-08-19T12:54:11Z</time>
-        <fix>none</fix>
-      </trkpt>
-      <trkpt lat="51.160198212" lon="14.946299553">
-        <ele>-0.304800</ele>
-        <time>2007-08-19T12:54:12Z</time>
-        <fix>none</fix>
-      </trkpt>
-      <trkpt lat="51.160198212" lon="14.946299553">
-        <ele>-0.304800</ele>
-        <time>2007-08-19T12:54:13Z</time>
-        <fix>none</fix>
-      </trkpt>
-      <trkpt lat="51.160198212" lon="14.946299553">
-        <ele>-0.304800</ele>
-        <time>2007-08-19T12:54:15Z</time>
-        <fix>none</fix>
-      </trkpt>
-      <trkpt lat="51.160198212" lon="14.946299553">
-        <ele>-0.304800</ele>
-        <time>2007-08-19T12:54:16Z</time>
-        <fix>none</fix>
-      </trkpt>
-      <trkpt lat="51.160198212" lon="14.946299553">
-        <ele>-0.304800</ele>
-        <time>2007-08-19T12:54:17Z</time>
-        <fix>none</fix>
-      </trkpt>
-      <trkpt lat="51.160198212" lon="14.946299553">
-        <ele>-0.304800</ele>
-        <time>2007-08-19T12:54:18Z</time>
-        <fix>none</fix>
-      </trkpt>
-      <trkpt lat="51.160198212" lon="14.946299553">
-        <ele>-0.304800</ele>
-        <time>2007-08-19T12:54:20Z</time>
-        <fix>none</fix>
-      </trkpt>
-      <trkpt lat="51.160198212" lon="14.946299553">
-        <ele>-0.304800</ele>
-        <time>2007-08-19T12:54:21Z</time>
-        <fix>none</fix>
-      </trkpt>
-      <trkpt lat="51.160198212" lon="14.946299553">
-        <ele>-0.304800</ele>
-        <time>2007-08-19T12:54:22Z</time>
-        <fix>none</fix>
-      </trkpt>
-      <trkpt lat="51.160198212" lon="14.946299553">
-        <ele>-0.304800</ele>
-        <time>2007-08-19T12:54:23Z</time>
-        <fix>none</fix>
-      </trkpt>
-      <trkpt lat="51.160198212" lon="14.946299553">
-        <ele>-0.304800</ele>
-        <time>2007-08-19T12:54:25Z</time>
-        <fix>none</fix>
-      </trkpt>
-      <trkpt lat="51.160198212" lon="14.946299553">
-        <ele>-0.304800</ele>
-        <time>2007-08-19T12:54:26Z</time>
-        <fix>none</fix>
-      </trkpt>
-      <trkpt lat="51.160198212" lon="14.946299553">
-        <ele>-0.304800</ele>
-        <time>2007-08-19T12:54:27Z</time>
-        <fix>none</fix>
-      </trkpt>
-      <trkpt lat="51.160198212" lon="14.946299553">
-        <ele>-0.304800</ele>
-        <time>2007-08-19T12:54:28Z</time>
-        <fix>none</fix>
-      </trkpt>
-      <trkpt lat="51.160198212" lon="14.946299553">
-        <ele>-0.304800</ele>
-        <time>2007-08-19T12:54:29Z</time>
-        <fix>none</fix>
-      </trkpt>
-      <trkpt lat="51.160198212" lon="14.946299553">
-        <ele>-0.304800</ele>
-        <time>2007-08-19T12:54:31Z</time>
-        <fix>none</fix>
-      </trkpt>
-      <trkpt lat="51.160198212" lon="14.946299553">
-        <ele>-0.304800</ele>
-        <time>2007-08-19T12:54:32Z</time>
-        <fix>none</fix>
-      </trkpt>
-      <trkpt lat="51.160198212" lon="14.946299553">
-        <ele>-0.304800</ele>
-        <time>2007-08-19T12:54:33Z</time>
-        <fix>none</fix>
-      </trkpt>
-      <trkpt lat="51.160198212" lon="14.946299553">
-        <ele>-0.304800</ele>
-        <time>2007-08-19T12:54:34Z</time>
-        <fix>none</fix>
-      </trkpt>
-      <trkpt lat="51.160198212" lon="14.946299553">
-        <ele>-0.304800</ele>
-        <time>2007-08-19T12:54:35Z</time>
-        <fix>none</fix>
-      </trkpt>
-      <trkpt lat="51.160198212" lon="14.946299553">
-        <ele>-0.304800</ele>
-        <time>2007-08-19T12:54:36Z</time>
-        <fix>none</fix>
-      </trkpt>
-      <trkpt lat="51.160198212" lon="14.946299553">
-        <ele>-0.304800</ele>
-        <time>2007-08-19T12:54:37Z</time>
-        <fix>none</fix>
-      </trkpt>
-      <trkpt lat="51.160198212" lon="14.946299553">
-        <ele>-0.304800</ele>
-        <time>2007-08-19T12:54:38Z</time>
-        <fix>none</fix>
-      </trkpt>
-      <trkpt lat="51.160198212" lon="14.946299553">
-        <ele>-0.304800</ele>
-        <time>2007-08-19T12:54:40Z</time>
-        <fix>none</fix>
-      </trkpt>
-      <trkpt lat="51.160198212" lon="14.946299553">
-        <ele>-0.304800</ele>
-        <time>2007-08-19T12:54:41Z</time>
-        <fix>none</fix>
-      </trkpt>
-      <trkpt lat="51.160198212" lon="14.946299553">
-        <ele>-0.304800</ele>
-        <time>2007-08-19T12:54:42Z</time>
-        <fix>none</fix>
-      </trkpt>
-      <trkpt lat="51.160198212" lon="14.946299553">
-        <ele>-0.304800</ele>
-        <time>2007-08-19T12:54:43Z</time>
-        <fix>none</fix>
-      </trkpt>
-      <trkpt lat="51.160198212" lon="14.946299553">
-        <ele>-0.304800</ele>
-        <time>2007-08-19T12:54:45Z</time>
-        <fix>none</fix>
-      </trkpt>
-      <trkpt lat="51.160198212" lon="14.946299553">
-        <ele>-0.304800</ele>
-        <time>2007-08-19T12:54:46Z</time>
-        <fix>none</fix>
-      </trkpt>
-      <trkpt lat="51.160198212" lon="14.946299553">
-        <ele>-0.304800</ele>
-        <time>2007-08-19T12:54:47Z</time>
-        <fix>none</fix>
-      </trkpt>
-      <trkpt lat="51.160198212" lon="14.946299553">
-        <ele>-0.304800</ele>
-        <time>2007-08-19T12:54:48Z</time>
-        <fix>none</fix>
-      </trkpt>
-      <trkpt lat="51.160198212" lon="14.946299553">
-        <ele>-0.304800</ele>
-        <time>2007-08-19T12:54:50Z</time>
-        <fix>none</fix>
-      </trkpt>
-      <trkpt lat="51.160198212" lon="14.946299553">
-        <ele>-0.304800</ele>
-        <time>2007-08-19T12:54:51Z</time>
-        <fix>none</fix>
-      </trkpt>
-      <trkpt lat="51.160198212" lon="14.946299553">
-        <ele>-0.304800</ele>
-        <time>2007-08-19T12:54:52Z</time>
-        <fix>none</fix>
-      </trkpt>
-      <trkpt lat="51.160198212" lon="14.946299553">
-        <ele>-0.304800</ele>
-        <time>2007-08-19T12:54:53Z</time>
-        <fix>none</fix>
-      </trkpt>
-      <trkpt lat="51.160198212" lon="14.946299553">
-        <ele>-0.304800</ele>
-        <time>2007-08-19T12:54:54Z</time>
-        <fix>none</fix>
-      </trkpt>
-      <trkpt lat="51.160198212" lon="14.946299553">
-        <ele>-0.304800</ele>
-        <time>2007-08-19T12:54:55Z</time>
-        <fix>none</fix>
-      </trkpt>
-      <trkpt lat="51.160198212" lon="14.946299553">
-        <ele>-0.304800</ele>
-        <time>2007-08-19T12:54:56Z</time>
-        <fix>none</fix>
-      </trkpt>
-      <trkpt lat="51.160198212" lon="14.946299553">
-        <ele>-0.304800</ele>
-        <time>2007-08-19T12:54:57Z</time>
-        <fix>none</fix>
-      </trkpt>
-      <trkpt lat="51.160198212" lon="14.946299553">
-        <ele>-0.304800</ele>
-        <time>2007-08-19T12:54:58Z</time>
-        <fix>none</fix>
-      </trkpt>
-      <trkpt lat="51.160198212" lon="14.946299553">
-        <ele>-0.304800</ele>
-        <time>2007-08-19T12:54:59Z</time>
-        <fix>none</fix>
-      </trkpt>
-      <trkpt lat="51.160198212" lon="14.946299553">
-        <ele>-0.304800</ele>
-        <time>2007-08-19T12:55:01Z</time>
-        <fix>none</fix>
-      </trkpt>
-      <trkpt lat="51.160198212" lon="14.946299553">
-        <ele>-0.304800</ele>
-        <time>2007-08-19T12:55:02Z</time>
-        <fix>none</fix>
-      </trkpt>
-      <trkpt lat="51.160198212" lon="14.946299553">
-        <ele>-0.304800</ele>
-        <time>2007-08-19T12:55:03Z</time>
-        <fix>none</fix>
-      </trkpt>
-      <trkpt lat="51.160198212" lon="14.946299553">
-        <ele>-0.304800</ele>
-        <time>2007-08-19T12:55:04Z</time>
-        <fix>none</fix>
-      </trkpt>
-      <trkpt lat="51.160198212" lon="14.946299553">
-        <ele>-0.304800</ele>
-        <time>2007-08-19T12:55:05Z</time>
-        <fix>none</fix>
-      </trkpt>
-      <trkpt lat="51.160198212" lon="14.946299553">
-        <ele>-0.304800</ele>
-        <time>2007-08-19T12:55:06Z</time>
-        <fix>none</fix>
-      </trkpt>
-      <trkpt lat="51.160198212" lon="14.946299553">
-        <ele>-0.304800</ele>
-        <time>2007-08-19T12:55:08Z</time>
-        <fix>none</fix>
-      </trkpt>
-      <trkpt lat="51.160198212" lon="14.946299553">
-        <ele>-0.304800</ele>
-        <time>2007-08-19T12:55:09Z</time>
-        <fix>none</fix>
-      </trkpt>
-      <trkpt lat="51.160198212" lon="14.946299553">
-        <ele>-0.304800</ele>
-        <time>2007-08-19T12:55:10Z</time>
-        <fix>none</fix>
-      </trkpt>
-      <trkpt lat="51.160198212" lon="14.946299553">
-        <ele>-0.304800</ele>
-        <time>2007-08-19T12:55:11Z</time>
-        <fix>none</fix>
-      </trkpt>
-      <trkpt lat="51.160198212" lon="14.946299553">
-        <ele>-0.304800</ele>
-        <time>2007-08-19T12:55:12Z</time>
-        <fix>none</fix>
-      </trkpt>
-      <trkpt lat="51.160198212" lon="14.946299553">
-        <ele>-0.304800</ele>
-        <time>2007-08-19T12:55:13Z</time>
-        <fix>none</fix>
-      </trkpt>
-      <trkpt lat="51.160198212" lon="14.946299553">
-        <ele>-0.304800</ele>
-        <time>2007-08-19T12:55:14Z</time>
-        <fix>none</fix>
-      </trkpt>
-      <trkpt lat="51.160198212" lon="14.946299553">
-        <ele>-0.304800</ele>
-        <time>2007-08-19T12:55:16Z</time>
-        <fix>none</fix>
-      </trkpt>
-      <trkpt lat="51.160198212" lon="14.946299553">
-        <ele>-0.304800</ele>
-        <time>2007-08-19T12:55:17Z</time>
-        <fix>none</fix>
-      </trkpt>
-      <trkpt lat="51.160198212" lon="14.946299553">
-        <ele>-0.304800</ele>
-        <time>2007-08-19T12:55:18Z</time>
-        <fix>none</fix>
-      </trkpt>
-      <trkpt lat="51.160198212" lon="14.946299553">
-        <ele>-0.304800</ele>
-        <time>2007-08-19T12:55:19Z</time>
-        <fix>none</fix>
-      </trkpt>
-      <trkpt lat="51.160198212" lon="14.946299553">
-        <ele>-0.304800</ele>
-        <time>2007-08-19T12:55:20Z</time>
-        <fix>none</fix>
-      </trkpt>
-      <trkpt lat="51.160198212" lon="14.946299553">
-        <ele>-0.304800</ele>
-        <time>2007-08-19T12:55:21Z</time>
-        <fix>none</fix>
-      </trkpt>
-      <trkpt lat="51.160198212" lon="14.946299553">
-        <ele>-0.304800</ele>
-        <time>2007-08-19T12:55:22Z</time>
-        <fix>none</fix>
-      </trkpt>
-      <trkpt lat="51.160198212" lon="14.946299553">
-        <ele>-0.304800</ele>
-        <time>2007-08-19T12:55:23Z</time>
-        <fix>none</fix>
-      </trkpt>
-      <trkpt lat="51.160198212" lon="14.946299553">
-        <ele>-0.304800</ele>
-        <time>2007-08-19T12:55:25Z</time>
-        <fix>none</fix>
-      </trkpt>
-      <trkpt lat="51.160198212" lon="14.946299553">
-        <ele>-0.304800</ele>
-        <time>2007-08-19T12:55:26Z</time>
-        <fix>none</fix>
-      </trkpt>
-      <trkpt lat="51.160198212" lon="14.946299553">
-        <ele>-0.304800</ele>
-        <time>2007-08-19T12:55:27Z</time>
-        <fix>none</fix>
-      </trkpt>
-      <trkpt lat="51.160198212" lon="14.946299553">
-        <ele>-0.304800</ele>
-        <time>2007-08-19T12:55:28Z</time>
-        <fix>none</fix>
-      </trkpt>
-      <trkpt lat="51.160198212" lon="14.946299553">
-        <ele>-0.304800</ele>
-        <time>2007-08-19T12:55:29Z</time>
-        <fix>none</fix>
-      </trkpt>
-      <trkpt lat="51.160198212" lon="14.946299553">
-        <ele>-0.304800</ele>
-        <time>2007-08-19T12:55:30Z</time>
-        <fix>none</fix>
-      </trkpt>
-      <trkpt lat="51.160198212" lon="14.946299553">
-        <ele>-0.304800</ele>
-        <time>2007-08-19T12:55:31Z</time>
-        <fix>none</fix>
-      </trkpt>
-      <trkpt lat="51.160198212" lon="14.946299553">
-        <ele>-0.304800</ele>
-        <time>2007-08-19T12:55:32Z</time>
-        <fix>none</fix>
-      </trkpt>
-      <trkpt lat="51.160198212" lon="14.946299553">
-        <ele>-0.304800</ele>
-        <time>2007-08-19T12:55:33Z</time>
-        <fix>none</fix>
-      </trkpt>
-      <trkpt lat="51.160198212" lon="14.946299553">
-        <ele>231.295203</ele>
-        <time>2007-08-19T12:55:34Z</time>
-        <fix>none</fix>
-      </trkpt>
-      <trkpt lat="51.160514832" lon="14.946450233">
-        <ele>231.295203</ele>
-        <time>2007-08-19T12:55:34Z</time>
-        <fix>3d</fix>
-      </trkpt>
-      <trkpt lat="51.160507202" lon="14.946461678">
-        <ele>230.295208</ele>
-        <time>2007-08-19T12:55:36Z</time>
-        <fix>3d</fix>
-      </trkpt>
-      <trkpt lat="51.160503387" lon="14.946471214">
-        <ele>230.295208</ele>
-        <time>2007-08-19T12:55:37Z</time>
-        <fix>3d</fix>
-      </trkpt>
-      <trkpt lat="51.160499573" lon="14.946484566">
-        <ele>230.095202</ele>
-        <time>2007-08-19T12:55:38Z</time>
-        <fix>3d</fix>
-      </trkpt>
-      <trkpt lat="51.160499573" lon="14.946484566">
-        <ele>230.095202</ele>
-        <time>2007-08-19T12:55:39Z</time>
-        <fix>3d</fix>
-      </trkpt>
-      <trkpt lat="51.160499573" lon="14.946484566">
-        <ele>230.095202</ele>
-        <time>2007-08-19T12:55:40Z</time>
-        <fix>3d</fix>
-      </trkpt>
-      <trkpt lat="51.160499573" lon="14.946484566">
-        <ele>230.095202</ele>
-        <time>2007-08-19T12:55:41Z</time>
-        <fix>3d</fix>
-      </trkpt>
-      <trkpt lat="51.160499573" lon="14.946484566">
-        <ele>230.095202</ele>
-        <time>2007-08-19T12:55:42Z</time>
-        <fix>3d</fix>
-      </trkpt>
-      <trkpt lat="51.160499573" lon="14.946484566">
-        <ele>230.095202</ele>
-        <time>2007-08-19T12:55:43Z</time>
-        <fix>3d</fix>
-      </trkpt>
-      <trkpt lat="51.160511017" lon="14.946571350">
-        <ele>229.195201</ele>
-        <time>2007-08-19T12:55:44Z</time>
-        <fix>3d</fix>
-      </trkpt>
-      <trkpt lat="51.160518646" lon="14.946591377">
-        <ele>229.195201</ele>
-        <time>2007-08-19T12:55:45Z</time>
-        <fix>3d</fix>
-      </trkpt>
-      <trkpt lat="51.160530090" lon="14.946611404">
-        <ele>229.195201</ele>
-        <time>2007-08-19T12:55:46Z</time>
-        <fix>3d</fix>
-      </trkpt>
-      <trkpt lat="51.160541534" lon="14.946633339">
-        <ele>229.295195</ele>
-        <time>2007-08-19T12:55:47Z</time>
-        <fix>3d</fix>
-      </trkpt>
-      <trkpt lat="51.160556793" lon="14.946656227">
-        <ele>229.295195</ele>
-        <time>2007-08-19T12:55:48Z</time>
-        <fix>3d</fix>
-      </trkpt>
-      <trkpt lat="51.160572052" lon="14.946680069">
-        <ele>229.295195</ele>
-        <time>2007-08-19T12:55:49Z</time>
-        <fix>3d</fix>
-      </trkpt>
-      <trkpt lat="51.160591125" lon="14.946704865">
-        <ele>229.395207</ele>
-        <time>2007-08-19T12:55:50Z</time>
-        <fix>3d</fix>
-      </trkpt>
-      <trkpt lat="51.160610199" lon="14.946735382">
-        <ele>229.395207</ele>
-        <time>2007-08-19T12:55:51Z</time>
-        <fix>3d</fix>
-      </trkpt>
-      <trkpt lat="51.160629272" lon="14.946766853">
-        <ele>229.495201</ele>
-        <time>2007-08-19T12:55:52Z</time>
-        <fix>3d</fix>
-      </trkpt>
-      <trkpt lat="51.160652161" lon="14.946800232">
-        <ele>229.495201</ele>
-        <time>2007-08-19T12:55:53Z</time>
-        <fix>3d</fix>
-      </trkpt>
-      <trkpt lat="51.160675049" lon="14.946833611">
-        <ele>229.495201</ele>
-        <time>2007-08-19T12:55:54Z</time>
-        <fix>3d</fix>
-      </trkpt>
-      <trkpt lat="51.160697937" lon="14.946865082">
-        <ele>229.495201</ele>
-        <time>2007-08-19T12:55:55Z</time>
-        <fix>3d</fix>
-      </trkpt>
-      <trkpt lat="51.160717010" lon="14.946896553">
-        <ele>229.595195</ele>
-        <time>2007-08-19T12:55:56Z</time>
-        <fix>3d</fix>
-      </trkpt>
-      <trkpt lat="51.160736084" lon="14.946923256">
-        <ele>229.595195</ele>
-        <time>2007-08-19T12:55:57Z</time>
-        <fix>3d</fix>
-      </trkpt>
-      <trkpt lat="51.160755157" lon="14.946947098">
-        <ele>229.795201</ele>
-        <time>2007-08-19T12:55:58Z</time>
-        <fix>3d</fix>
-      </trkpt>
-      <trkpt lat="51.160774231" lon="14.946969986">
-        <ele>229.895195</ele>
-        <time>2007-08-19T12:55:59Z</time>
-        <fix>3d</fix>
-      </trkpt>
-      <trkpt lat="51.160789490" lon="14.946991920">
-        <ele>229.895195</ele>
-        <time>2007-08-19T12:56:00Z</time>
-        <fix>3d</fix>
-      </trkpt>
-      <trkpt lat="51.160800934" lon="14.947014809">
-        <ele>229.995208</ele>
-        <time>2007-08-19T12:56:01Z</time>
-        <fix>3d</fix>
-      </trkpt>
-      <trkpt lat="51.160808563" lon="14.947039604">
-        <ele>230.095202</ele>
-        <time>2007-08-19T12:56:02Z</time>
-        <fix>3d</fix>
-      </trkpt>
-      <trkpt lat="51.160812378" lon="14.947066307">
-        <ele>230.195196</ele>
-        <time>2007-08-19T12:56:03Z</time>
-        <fix>3d</fix>
-      </trkpt>
-      <trkpt lat="51.160808563" lon="14.947090149">
-        <ele>230.595208</ele>
-        <time>2007-08-19T12:56:04Z</time>
-        <fix>3d</fix>
-      </trkpt>
-      <trkpt lat="51.160808563" lon="14.947114944">
-        <ele>230.795196</ele>
-        <time>2007-08-19T12:56:05Z</time>
-        <fix>3d</fix>
-      </trkpt>
-      <trkpt lat="51.160800934" lon="14.947139740">
-        <ele>231.095197</ele>
-        <time>2007-08-19T12:56:06Z</time>
-        <fix>3d</fix>
-      </trkpt>
-      <trkpt lat="51.160789490" lon="14.947166443">
-        <ele>231.195209</ele>
-        <time>2007-08-19T12:56:07Z</time>
-        <fix>3d</fix>
-      </trkpt>
-      <trkpt lat="51.160778046" lon="14.947195053">
-        <ele>231.295203</ele>
-        <time>2007-08-19T12:56:08Z</time>
-        <fix>3d</fix>
-      </trkpt>
-      <trkpt lat="51.160762787" lon="14.947224617">
-        <ele>231.495191</ele>
-        <time>2007-08-19T12:56:09Z</time>
-        <fix>3d</fix>
-      </trkpt>
-      <trkpt lat="51.160743713" lon="14.947259903">
-        <ele>231.595203</ele>
-        <time>2007-08-19T12:56:10Z</time>
-        <fix>3d</fix>
-      </trkpt>
-      <trkpt lat="51.160724640" lon="14.947299957">
-        <ele>231.595203</ele>
-        <time>2007-08-19T12:56:11Z</time>
-        <fix>3d</fix>
-      </trkpt>
-      <trkpt lat="51.160701752" lon="14.947342873">
-        <ele>231.595203</ele>
-        <time>2007-08-19T12:56:12Z</time>
-        <fix>3d</fix>
-      </trkpt>
-      <trkpt lat="51.160678864" lon="14.947389603">
-        <ele>231.595203</ele>
-        <time>2007-08-19T12:56:13Z</time>
-        <fix>3d</fix>
-      </trkpt>
-      <trkpt lat="51.160655975" lon="14.947440147">
-        <ele>231.595203</ele>
-        <time>2007-08-19T12:56:14Z</time>
-        <fix>3d</fix>
-      </trkpt>
-      <trkpt lat="51.160629272" lon="14.947493553">
-        <ele>231.595203</ele>
-        <time>2007-08-19T12:56:15Z</time>
-        <fix>3d</fix>
-      </trkpt>
-      <trkpt lat="51.160602570" lon="14.947551727">
-        <ele>231.495191</ele>
-        <time>2007-08-19T12:56:16Z</time>
-        <fix>3d</fix>
-      </trkpt>
-      <trkpt lat="51.160575867" lon="14.947609901">
-        <ele>231.595203</ele>
-        <time>2007-08-19T12:56:17Z</time>
-        <fix>3d</fix>
-      </trkpt>
-      <trkpt lat="51.160549164" lon="14.947669983">
-        <ele>231.495191</ele>
-        <time>2007-08-19T12:56:18Z</time>
-        <fix>3d</fix>
-      </trkpt>
-      <trkpt lat="51.160518646" lon="14.947731972">
-        <ele>231.395197</ele>
-        <time>2007-08-19T12:56:19Z</time>
-        <fix>3d</fix>
-      </trkpt>
-      <trkpt lat="51.160488129" lon="14.947790146">
-        <ele>231.395197</ele>
-        <time>2007-08-19T12:56:20Z</time>
-        <fix>3d</fix>
-      </trkpt>
-      <trkpt lat="51.160461426" lon="14.947856903">
-        <ele>230.995203</ele>
-        <time>2007-08-19T12:56:21Z</time>
-        <fix>3d</fix>
-      </trkpt>
-      <trkpt lat="51.160427094" lon="14.947923660">
-        <ele>230.795196</ele>
-        <time>2007-08-19T12:56:22Z</time>
-        <fix>3d</fix>
-      </trkpt>
-      <trkpt lat="51.160396576" lon="14.947991371">
-        <ele>230.495196</ele>
-        <time>2007-08-19T12:56:23Z</time>
-        <fix>3d</fix>
-      </trkpt>
-      <trkpt lat="51.160366058" lon="14.948056221">
-        <ele>230.695202</ele>
-        <time>2007-08-19T12:56:24Z</time>
-        <fix>3d</fix>
-      </trkpt>
-      <trkpt lat="51.160331726" lon="14.948124886">
-        <ele>230.695202</ele>
-        <time>2007-08-19T12:56:25Z</time>
-        <fix>3d</fix>
-      </trkpt>
-      <trkpt lat="51.160301208" lon="14.948195457">
-        <ele>230.695202</ele>
-        <time>2007-08-19T12:56:26Z</time>
-        <fix>3d</fix>
-      </trkpt>
-      <trkpt lat="51.160266876" lon="14.948258400">
-        <ele>230.795196</ele>
-        <time>2007-08-19T12:56:27Z</time>
-        <fix>3d</fix>
-      </trkpt>
-      <trkpt lat="51.160232544" lon="14.948318481">
-        <ele>231.395197</ele>
-        <time>2007-08-19T12:56:28Z</time>
-        <fix>3d</fix>
-      </trkpt>
-      <trkpt lat="51.160194397" lon="14.948385239">
-        <ele>231.695197</ele>
-        <time>2007-08-19T12:56:29Z</time>
-        <fix>3d</fix>
-      </trkpt>
-      <trkpt lat="51.160160065" lon="14.948452950">
-        <ele>231.695197</ele>
-        <time>2007-08-19T12:56:30Z</time>
-        <fix>3d</fix>
-      </trkpt>
-      <trkpt lat="51.160118103" lon="14.948525429">
-        <ele>232.095191</ele>
-        <time>2007-08-19T12:56:31Z</time>
-        <fix>3d</fix>
-      </trkpt>
-      <trkpt lat="51.160079956" lon="14.948597908">
-        <ele>232.795204</ele>
-        <time>2007-08-19T12:56:32Z</time>
-        <fix>3d</fix>
-      </trkpt>
-      <trkpt lat="51.160041809" lon="14.948670387">
-        <ele>232.995192</ele>
-        <time>2007-08-19T12:56:33Z</time>
-        <fix>3d</fix>
-      </trkpt>
-      <trkpt lat="51.160003662" lon="14.948742867">
-        <ele>233.095205</ele>
-        <time>2007-08-19T12:56:34Z</time>
-        <fix>3d</fix>
-      </trkpt>
-      <trkpt lat="51.159965515" lon="14.948815346">
-        <ele>233.195199</ele>
-        <time>2007-08-19T12:56:35Z</time>
-        <fix>3d</fix>
-      </trkpt>
-      <trkpt lat="51.159927368" lon="14.948888779">
-        <ele>233.295192</ele>
-        <time>2007-08-19T12:56:36Z</time>
-        <fix>3d</fix>
-      </trkpt>
-      <trkpt lat="51.159893036" lon="14.948963165">
-        <ele>233.395205</ele>
-        <time>2007-08-19T12:56:37Z</time>
-        <fix>3d</fix>
-      </trkpt>
-      <trkpt lat="51.159851074" lon="14.949043274">
-        <ele>233.795199</ele>
-        <time>2007-08-19T12:56:38Z</time>
-        <fix>3d</fix>
-      </trkpt>
-      <trkpt lat="51.159809113" lon="14.949125290">
-        <ele>233.995206</ele>
-        <time>2007-08-19T12:56:39Z</time>
-        <fix>3d</fix>
-      </trkpt>
-      <trkpt lat="51.159770966" lon="14.949208260">
-        <ele>234.495194</ele>
-        <time>2007-08-19T12:56:40Z</time>
-        <fix>3d</fix>
-      </trkpt>
-      <trkpt lat="51.159736633" lon="14.949290276">
-        <ele>234.395200</ele>
-        <time>2007-08-19T12:56:41Z</time>
-        <fix>3d</fix>
-      </trkpt>
-      <trkpt lat="51.159698486" lon="14.949366570">
-        <ele>234.395200</ele>
-        <time>2007-08-19T12:56:42Z</time>
-        <fix>3d</fix>
-      </trkpt>
-      <trkpt lat="51.159664154" lon="14.949440002">
-        <ele>234.395200</ele>
-        <time>2007-08-19T12:56:43Z</time>
-        <fix>3d</fix>
-      </trkpt>
-      <trkpt lat="51.159629822" lon="14.949508667">
-        <ele>234.395200</ele>
-        <time>2007-08-19T12:56:44Z</time>
-        <fix>3d</fix>
-      </trkpt>
-      <trkpt lat="51.159599304" lon="14.949566841">
-        <ele>234.395200</ele>
-        <time>2007-08-19T12:56:45Z</time>
-        <fix>3d</fix>
-      </trkpt>
-      <trkpt lat="51.159564972" lon="14.949620247">
-        <ele>234.195193</ele>
-        <time>2007-08-19T12:56:46Z</time>
-        <fix>3d</fix>
-      </trkpt>
-      <trkpt lat="51.159534454" lon="14.949667931">
-        <ele>234.095199</ele>
-        <time>2007-08-19T12:56:47Z</time>
-        <fix>3d</fix>
-      </trkpt>
-      <trkpt lat="51.159500122" lon="14.949709892">
-        <ele>234.095199</ele>
-        <time>2007-08-19T12:56:48Z</time>
-        <fix>3d</fix>
-      </trkpt>
-      <trkpt lat="51.159461975" lon="14.949748039">
-        <ele>234.095199</ele>
-        <time>2007-08-19T12:56:49Z</time>
-        <fix>3d</fix>
-      </trkpt>
-      <trkpt lat="51.159427643" lon="14.949780464">
-        <ele>234.095199</ele>
-        <time>2007-08-19T12:56:50Z</time>
-        <fix>3d</fix>
-      </trkpt>
-      <trkpt lat="51.159397125" lon="14.949805260">
-        <ele>233.795199</ele>
-        <time>2007-08-19T12:56:51Z</time>
-        <fix>3d</fix>
-      </trkpt>
-      <trkpt lat="51.159366608" lon="14.949823380">
-        <ele>233.695205</ele>
-        <time>2007-08-19T12:56:52Z</time>
-        <fix>3d</fix>
-      </trkpt>
-      <trkpt lat="51.159332275" lon="14.949831963">
-        <ele>233.695205</ele>
-        <time>2007-08-19T12:56:53Z</time>
-        <fix>3d</fix>
-      </trkpt>
-      <trkpt lat="51.159301758" lon="14.949832916">
-        <ele>233.695205</ele>
-        <time>2007-08-19T12:56:54Z</time>
-        <fix>3d</fix>
-      </trkpt>
-      <trkpt lat="51.159267426" lon="14.949823380">
-        <ele>233.795199</ele>
-        <time>2007-08-19T12:56:55Z</time>
-        <fix>3d</fix>
-      </trkpt>
-      <trkpt lat="51.159236908" lon="14.949803352">
-        <ele>233.995206</ele>
-        <time>2007-08-19T12:56:56Z</time>
-        <fix>3d</fix>
-      </trkpt>
-      <trkpt lat="51.159210205" lon="14.949771881">
-        <ele>233.995206</ele>
-        <time>2007-08-19T12:56:57Z</time>
-        <fix>3d</fix>
-      </trkpt>
-      <trkpt lat="51.159187317" lon="14.949733734">
-        <ele>233.895193</ele>
-        <time>2007-08-19T12:56:58Z</time>
-        <fix>3d</fix>
-      </trkpt>
-      <trkpt lat="51.159168243" lon="14.949689865">
-        <ele>233.895193</ele>
-        <time>2007-08-19T12:56:59Z</time>
-        <fix>3d</fix>
-      </trkpt>
-      <trkpt lat="51.159156799" lon="14.949643135">
-        <ele>233.895193</ele>
-        <time>2007-08-19T12:57:00Z</time>
-        <fix>3d</fix>
-      </trkpt>
-      <trkpt lat="51.159137726" lon="14.949598312">
-        <ele>233.895193</ele>
-        <time>2007-08-19T12:57:01Z</time>
-        <fix>3d</fix>
-      </trkpt>
-      <trkpt lat="51.159122467" lon="14.949553490">
-        <ele>233.795199</ele>
-        <time>2007-08-19T12:57:02Z</time>
-        <fix>3d</fix>
-      </trkpt>
-      <trkpt lat="51.159103394" lon="14.949508667">
-        <ele>233.795199</ele>
-        <time>2007-08-19T12:57:03Z</time>
-        <fix>3d</fix>
-      </trkpt>
-      <trkpt lat="51.159088135" lon="14.949461937">
-        <ele>233.695205</ele>
-        <time>2007-08-19T12:57:04Z</time>
-        <fix>3d</fix>
-      </trkpt>
-      <trkpt lat="51.159069061" lon="14.949415207">
-        <ele>233.595193</ele>
-        <time>2007-08-19T12:57:05Z</time>
-        <fix>3d</fix>
-      </trkpt>
-      <trkpt lat="51.159053802" lon="14.949370384">
-        <ele>233.195199</ele>
-        <time>2007-08-19T12:57:06Z</time>
-        <fix>3d</fix>
-      </trkpt>
-      <trkpt lat="51.159038544" lon="14.949321747">
-        <ele>232.695192</ele>
-        <time>2007-08-19T12:57:07Z</time>
-        <fix>3d</fix>
-      </trkpt>
-      <trkpt lat="51.159015656" lon="14.949271202">
-        <ele>232.495204</ele>
-        <time>2007-08-19T12:57:08Z</time>
-        <fix>3d</fix>
-      </trkpt>
-      <trkpt lat="51.158996582" lon="14.949218750">
-        <ele>231.995197</ele>
-        <time>2007-08-19T12:57:09Z</time>
-        <fix>3d</fix>
-      </trkpt>
-      <trkpt lat="51.158977509" lon="14.949161530">
-        <ele>231.495191</ele>
-        <time>2007-08-19T12:57:10Z</time>
-        <fix>3d</fix>
-      </trkpt>
-      <trkpt lat="51.158954620" lon="14.949103355">
-        <ele>231.095197</ele>
-        <time>2007-08-19T12:57:11Z</time>
-        <fix>3d</fix>
-      </trkpt>
-      <trkpt lat="51.158927917" lon="14.949040413">
-        <ele>230.795196</ele>
-        <time>2007-08-19T12:57:12Z</time>
-        <fix>3d</fix>
-      </trkpt>
-      <trkpt lat="51.158901215" lon="14.948974609">
-        <ele>230.495196</ele>
-        <time>2007-08-19T12:57:13Z</time>
-        <fix>3d</fix>
-      </trkpt>
-      <trkpt lat="51.158874512" lon="14.948906898">
-        <ele>230.195196</ele>
-        <time>2007-08-19T12:57:14Z</time>
-        <fix>3d</fix>
-      </trkpt>
-      <trkpt lat="51.158847809" lon="14.948835373">
-        <ele>229.995208</ele>
-        <time>2007-08-19T12:57:15Z</time>
-        <fix>3d</fix>
-      </trkpt>
-      <trkpt lat="51.158821106" lon="14.948761940">
-        <ele>229.795201</ele>
-        <time>2007-08-19T12:57:16Z</time>
-        <fix>3d</fix>
-      </trkpt>
-      <trkpt lat="51.158794403" lon="14.948686600">
-        <ele>229.395207</ele>
-        <time>2007-08-19T12:57:17Z</time>
-        <fix>3d</fix>
-      </trkpt>
-      <trkpt lat="51.158763885" lon="14.948611259">
-        <ele>229.095207</ele>
-        <time>2007-08-19T12:57:18Z</time>
-        <fix>3d</fix>
-      </trkpt>
-      <trkpt lat="51.158737183" lon="14.948536873">
-        <ele>228.695194</ele>
-        <time>2007-08-19T12:57:19Z</time>
-        <fix>3d</fix>
-      </trkpt>
-      <trkpt lat="51.158710480" lon="14.948461533">
-        <ele>228.395194</ele>
-        <time>2007-08-19T12:57:20Z</time>
-        <fix>3d</fix>
-      </trkpt>
-      <trkpt lat="51.158679962" lon="14.948386192">
-        <ele>228.095194</ele>
-        <time>2007-08-19T12:57:21Z</time>
-        <fix>3d</fix>
-      </trkpt>
-      <trkpt lat="51.158649445" lon="14.948313713">
-        <ele>227.895206</ele>
-        <time>2007-08-19T12:57:22Z</time>
-        <fix>3d</fix>
-      </trkpt>
-      <trkpt lat="51.158618927" lon="14.948240280">
-        <ele>227.595206</ele>
-        <time>2007-08-19T12:57:23Z</time>
-        <fix>3d</fix>
-      </trkpt>
-      <trkpt lat="51.158588409" lon="14.948164940">
-        <ele>227.395199</ele>
-        <time>2007-08-19T12:57:24Z</time>
-        <fix>3d</fix>
-      </trkpt>
-      <trkpt lat="51.158561707" lon="14.948089600">
-        <ele>227.195193</ele>
-        <time>2007-08-19T12:57:25Z</time>
-        <fix>3d</fix>
-      </trkpt>
-      <trkpt lat="51.158531189" lon="14.948015213">
-        <ele>226.995205</ele>
-        <time>2007-08-19T12:57:26Z</time>
-        <fix>3d</fix>
-      </trkpt>
-      <trkpt lat="51.158496857" lon="14.947939873">
-        <ele>226.795199</ele>
-        <time>2007-08-19T12:57:27Z</time>
-        <fix>3d</fix>
-      </trkpt>
-      <trkpt lat="51.158470154" lon="14.947864532">
-        <ele>226.595192</ele>
-        <time>2007-08-19T12:57:28Z</time>
-        <fix>3d</fix>
-      </trkpt>
-      <trkpt lat="51.158439636" lon="14.947786331">
-        <ele>226.395204</ele>
-        <time>2007-08-19T12:57:29Z</time>
-        <fix>3d</fix>
-      </trkpt>
-      <trkpt lat="51.158409119" lon="14.947708130">
-        <ele>226.095204</ele>
-        <time>2007-08-19T12:57:30Z</time>
-        <fix>3d</fix>
-      </trkpt>
-      <trkpt lat="51.158378601" lon="14.947629929">
-        <ele>225.895198</ele>
-        <time>2007-08-19T12:57:31Z</time>
-        <fix>3d</fix>
-      </trkpt>
-      <trkpt lat="51.158348083" lon="14.947551727">
-        <ele>225.695191</ele>
-        <time>2007-08-19T12:57:32Z</time>
-        <fix>3d</fix>
-      </trkpt>
-      <trkpt lat="51.158313751" lon="14.947476387">
-        <ele>225.495203</ele>
-        <time>2007-08-19T12:57:33Z</time>
-        <fix>3d</fix>
-      </trkpt>
-      <trkpt lat="51.158283234" lon="14.947402954">
-        <ele>225.295197</ele>
-        <time>2007-08-19T12:57:34Z</time>
-        <fix>3d</fix>
-      </trkpt>
-      <trkpt lat="51.158248901" lon="14.947326660">
-        <ele>225.095209</ele>
-        <time>2007-08-19T12:57:35Z</time>
-        <fix>3d</fix>
-      </trkpt>
-      <trkpt lat="51.158218384" lon="14.947248459">
-        <ele>224.895203</ele>
-        <time>2007-08-19T12:57:36Z</time>
-        <fix>3d</fix>
-      </trkpt>
-      <trkpt lat="51.158191681" lon="14.947170258">
-        <ele>224.795209</ele>
-        <time>2007-08-19T12:57:37Z</time>
-        <fix>3d</fix>
-      </trkpt>
-      <trkpt lat="51.158161163" lon="14.947090149">
-        <ele>224.595203</ele>
-        <time>2007-08-19T12:57:38Z</time>
-        <fix>3d</fix>
-      </trkpt>
-      <trkpt lat="51.158134460" lon="14.947010040">
-        <ele>224.495209</ele>
-        <time>2007-08-19T12:57:39Z</time>
-        <fix>3d</fix>
-      </trkpt>
-      <trkpt lat="51.158103943" lon="14.946931839">
-        <ele>224.395196</ele>
-        <time>2007-08-19T12:57:40Z</time>
-        <fix>3d</fix>
-      </trkpt>
-      <trkpt lat="51.158077240" lon="14.946856499">
-        <ele>224.295202</ele>
-        <time>2007-08-19T12:57:41Z</time>
-        <fix>3d</fix>
-      </trkpt>
-      <trkpt lat="51.158046722" lon="14.946780205">
-        <ele>224.495209</ele>
-        <time>2007-08-19T12:57:42Z</time>
-        <fix>3d</fix>
-      </trkpt>
-      <trkpt lat="51.158016205" lon="14.946702957">
-        <ele>224.695196</ele>
-        <time>2007-08-19T12:57:43Z</time>
-        <fix>3d</fix>
-      </trkpt>
-      <trkpt lat="51.157985687" lon="14.946628571">
-        <ele>224.795209</ele>
-        <time>2007-08-19T12:57:44Z</time>
-        <fix>3d</fix>
-      </trkpt>
-      <trkpt lat="51.157955170" lon="14.946553230">
-        <ele>224.795209</ele>
-        <time>2007-08-19T12:57:45Z</time>
-        <fix>3d</fix>
-      </trkpt>
-      <trkpt lat="51.157924652" lon="14.946477890">
-        <ele>224.795209</ele>
-        <time>2007-08-19T12:57:46Z</time>
-        <fix>3d</fix>
-      </trkpt>
-      <trkpt lat="51.157894135" lon="14.946406364">
-        <ele>224.695196</ele>
-        <time>2007-08-19T12:57:47Z</time>
-        <fix>3d</fix>
-      </trkpt>
-      <trkpt lat="51.157863617" lon="14.946332932">
-        <ele>224.695196</ele>
-        <time>2007-08-19T12:57:48Z</time>
-        <fix>3d</fix>
-      </trkpt>
-      <trkpt lat="51.157840729" lon="14.946258545">
-        <ele>224.495209</ele>
-        <time>2007-08-19T12:57:49Z</time>
-        <fix>3d</fix>
-      </trkpt>
-      <trkpt lat="51.157817841" lon="14.946185112">
-        <ele>224.395196</ele>
-        <time>2007-08-19T12:57:50Z</time>
-        <fix>3d</fix>
-      </trkpt>
-      <trkpt lat="51.157794952" lon="14.946121216">
-        <ele>224.395196</ele>
-        <time>2007-08-19T12:57:51Z</time>
-        <fix>3d</fix>
-      </trkpt>
-      <trkpt lat="51.157772064" lon="14.946069717">
-        <ele>224.395196</ele>
-        <time>2007-08-19T12:57:52Z</time>
-        <fix>3d</fix>
-      </trkpt>
-      <trkpt lat="51.157741547" lon="14.946036339">
-        <ele>224.395196</ele>
-        <time>2007-08-19T12:57:53Z</time>
-        <fix>3d</fix>
-      </trkpt>
-      <trkpt lat="51.157711029" lon="14.946018219">
-        <ele>224.495209</ele>
-        <time>2007-08-19T12:57:54Z</time>
-        <fix>3d</fix>
-      </trkpt>
-      <trkpt lat="51.157684326" lon="14.946011543">
-        <ele>224.695196</ele>
-        <time>2007-08-19T12:57:55Z</time>
-        <fix>3d</fix>
-      </trkpt>
-      <trkpt lat="51.157661438" lon="14.946011543">
-        <ele>224.795209</ele>
-        <time>2007-08-19T12:57:56Z</time>
-        <fix>3d</fix>
-      </trkpt>
-      <trkpt lat="51.157642365" lon="14.946015358">
-        <ele>225.095209</ele>
-        <time>2007-08-19T12:57:57Z</time>
-        <fix>3d</fix>
-      </trkpt>
-      <trkpt lat="51.157630920" lon="14.946020126">
-        <ele>225.095209</ele>
-        <time>2007-08-19T12:57:58Z</time>
-        <fix>3d</fix>
-      </trkpt>
-      <trkpt lat="51.157619476" lon="14.946024895">
-        <ele>225.095209</ele>
-        <time>2007-08-19T12:57:59Z</time>
-        <fix>3d</fix>
-      </trkpt>
-      <trkpt lat="51.157611847" lon="14.946028709">
-        <ele>225.095209</ele>
-        <time>2007-08-19T12:58:00Z</time>
-        <fix>3d</fix>
-      </trkpt>
-      <trkpt lat="51.157611847" lon="14.946029663">
-        <ele>225.095209</ele>
-        <time>2007-08-19T12:58:01Z</time>
-        <fix>3d</fix>
-      </trkpt>
-      <trkpt lat="51.157611847" lon="14.946029663">
-        <ele>225.095209</ele>
-        <time>2007-08-19T12:58:02Z</time>
-        <fix>3d</fix>
-      </trkpt>
-      <trkpt lat="51.157611847" lon="14.946029663">
-        <ele>225.095209</ele>
-        <time>2007-08-19T12:58:03Z</time>
-        <fix>3d</fix>
-      </trkpt>
-      <trkpt lat="51.157611847" lon="14.946029663">
-        <ele>225.095209</ele>
-        <time>2007-08-19T12:58:04Z</time>
-        <fix>3d</fix>
-      </trkpt>
-      <trkpt lat="51.157611847" lon="14.946029663">
-        <ele>225.095209</ele>
-        <time>2007-08-19T12:58:05Z</time>
-        <fix>3d</fix>
-      </trkpt>
-      <trkpt lat="51.157611847" lon="14.946029663">
-        <ele>225.095209</ele>
-        <time>2007-08-19T12:58:06Z</time>
-        <fix>3d</fix>
-      </trkpt>
-      <trkpt lat="51.157611847" lon="14.946029663">
-        <ele>225.095209</ele>
-        <time>2007-08-19T12:58:08Z</time>
-        <fix>3d</fix>
-      </trkpt>
-      <trkpt lat="51.157611847" lon="14.946029663">
-        <ele>225.095209</ele>
-        <time>2007-08-19T12:58:09Z</time>
-        <fix>3d</fix>
-      </trkpt>
-      <trkpt lat="51.157611847" lon="14.946029663">
-        <ele>225.095209</ele>
-        <time>2007-08-19T12:58:10Z</time>
-        <fix>3d</fix>
-      </trkpt>
-      <trkpt lat="51.157611847" lon="14.946029663">
-        <ele>225.095209</ele>
-        <time>2007-08-19T12:58:11Z</time>
-        <fix>3d</fix>
-      </trkpt>
-      <trkpt lat="51.157611847" lon="14.946029663">
-        <ele>225.095209</ele>
-        <time>2007-08-19T12:58:12Z</time>
-        <fix>3d</fix>
-      </trkpt>
-      <trkpt lat="51.157611847" lon="14.946029663">
-        <ele>225.095209</ele>
-        <time>2007-08-19T12:58:14Z</time>
-        <fix>3d</fix>
-      </trkpt>
-      <trkpt lat="51.157611847" lon="14.946029663">
-        <ele>225.095209</ele>
-        <time>2007-08-19T12:58:15Z</time>
-        <fix>3d</fix>
-      </trkpt>
-      <trkpt lat="51.157611847" lon="14.946029663">
-        <ele>225.095209</ele>
-        <time>2007-08-19T12:58:16Z</time>
-        <fix>3d</fix>
-      </trkpt>
-      <trkpt lat="51.157611847" lon="14.946029663">
-        <ele>225.095209</ele>
-        <time>2007-08-19T12:58:17Z</time>
-        <fix>3d</fix>
-      </trkpt>
-      <trkpt lat="51.157611847" lon="14.946029663">
-        <ele>225.095209</ele>
-        <time>2007-08-19T12:58:18Z</time>
-        <fix>3d</fix>
-      </trkpt>
-      <trkpt lat="51.157611847" lon="14.946029663">
-        <ele>225.095209</ele>
-        <time>2007-08-19T12:58:19Z</time>
-        <fix>3d</fix>
-      </trkpt>
-      <trkpt lat="51.157611847" lon="14.946029663">
-        <ele>225.095209</ele>
-        <time>2007-08-19T12:58:20Z</time>
-        <fix>3d</fix>
-      </trkpt>
-      <trkpt lat="51.157611847" lon="14.946029663">
-        <ele>225.095209</ele>
-        <time>2007-08-19T12:58:21Z</time>
-        <fix>3d</fix>
-      </trkpt>
-      <trkpt lat="51.157611847" lon="14.946029663">
-        <ele>225.095209</ele>
-        <time>2007-08-19T12:58:22Z</time>
-        <fix>3d</fix>
-      </trkpt>
-      <trkpt lat="51.157611847" lon="14.946029663">
-        <ele>225.095209</ele>
-        <time>2007-08-19T12:58:23Z</time>
-        <fix>3d</fix>
-      </trkpt>
-      <trkpt lat="51.157611847" lon="14.946029663">
-        <ele>225.095209</ele>
-        <time>2007-08-19T12:58:24Z</time>
-        <fix>3d</fix>
-      </trkpt>
-      <trkpt lat="51.157611847" lon="14.946029663">
-        <ele>225.095209</ele>
-        <time>2007-08-19T12:58:26Z</time>
-        <fix>3d</fix>
-      </trkpt>
-      <trkpt lat="51.157611847" lon="14.946029663">
-        <ele>225.095209</ele>
-        <time>2007-08-19T12:58:27Z</time>
-        <fix>3d</fix>
-      </trkpt>
-      <trkpt lat="51.157611847" lon="14.946029663">
-        <ele>225.095209</ele>
-        <time>2007-08-19T12:58:28Z</time>
-        <fix>3d</fix>
-      </trkpt>
-      <trkpt lat="51.157611847" lon="14.946029663">
-        <ele>225.095209</ele>
-        <time>2007-08-19T12:58:29Z</time>
-        <fix>3d</fix>
-      </trkpt>
-      <trkpt lat="51.157611847" lon="14.946029663">
-        <ele>225.095209</ele>
-        <time>2007-08-19T12:58:30Z</time>
-        <fix>3d</fix>
-      </trkpt>
-      <trkpt lat="51.157611847" lon="14.946029663">
-        <ele>225.095209</ele>
-        <time>2007-08-19T12:58:31Z</time>
-        <fix>3d</fix>
-      </trkpt>
-      <trkpt lat="51.157611847" lon="14.946029663">
-        <ele>225.095209</ele>
-        <time>2007-08-19T12:58:32Z</time>
-        <fix>3d</fix>
-      </trkpt>
-      <trkpt lat="51.157611847" lon="14.946029663">
-        <ele>225.095209</ele>
-        <time>2007-08-19T12:58:33Z</time>
-        <fix>3d</fix>
-      </trkpt>
-      <trkpt lat="51.157611847" lon="14.946029663">
-        <ele>225.095209</ele>
-        <time>2007-08-19T12:58:34Z</time>
-        <fix>3d</fix>
-      </trkpt>
-      <trkpt lat="51.157611847" lon="14.946029663">
-        <ele>225.095209</ele>
-        <time>2007-08-19T12:58:35Z</time>
-        <fix>3d</fix>
-      </trkpt>
-      <trkpt lat="51.157611847" lon="14.946029663">
-        <ele>225.095209</ele>
-        <time>2007-08-19T12:58:36Z</time>
-        <fix>3d</fix>
-      </trkpt>
-      <trkpt lat="51.157611847" lon="14.946029663">
-        <ele>225.095209</ele>
-        <time>2007-08-19T12:58:38Z</time>
-        <fix>3d</fix>
-      </trkpt>
-      <trkpt lat="51.157611847" lon="14.946029663">
-        <ele>225.095209</ele>
-        <time>2007-08-19T12:58:39Z</time>
-        <fix>3d</fix>
-      </trkpt>
-      <trkpt lat="51.157546997" lon="14.946068764">
-        <ele>223.695202</ele>
-        <time>2007-08-19T12:58:40Z</time>
-        <fix>3d</fix>
-      </trkpt>
-      <trkpt lat="51.157531738" lon="14.946082115">
-        <ele>223.895208</ele>
-        <time>2007-08-19T12:58:41Z</time>
-        <fix>3d</fix>
-      </trkpt>
-      <trkpt lat="51.157512665" lon="14.946102142">
-        <ele>224.295202</ele>
-        <time>2007-08-19T12:58:42Z</time>
-        <fix>3d</fix>
-      </trkpt>
-      <trkpt lat="51.157485962" lon="14.946134567">
-        <ele>224.595203</ele>
-        <time>2007-08-19T12:58:43Z</time>
-        <fix>3d</fix>
-      </trkpt>
-      <trkpt lat="51.157459259" lon="14.946183205">
-        <ele>224.995197</ele>
-        <time>2007-08-19T12:58:44Z</time>
-        <fix>3d</fix>
-      </trkpt>
-      <trkpt lat="51.157436371" lon="14.946249962">
-        <ele>225.195203</ele>
-        <time>2007-08-19T12:58:45Z</time>
-        <fix>3d</fix>
-      </trkpt>
-      <trkpt lat="51.157424927" lon="14.946332932">
-        <ele>225.395191</ele>
-        <time>2007-08-19T12:58:46Z</time>
-        <fix>3d</fix>
-      </trkpt>
-      <trkpt lat="51.157424927" lon="14.946428299">
-        <ele>225.795204</ele>
-        <time>2007-08-19T12:58:47Z</time>
-        <fix>3d</fix>
-      </trkpt>
-      <trkpt lat="51.157436371" lon="14.946530342">
-        <ele>225.995192</ele>
-        <time>2007-08-19T12:58:48Z</time>
-        <fix>3d</fix>
-      </trkpt>
-      <trkpt lat="51.157463074" lon="14.946636200">
-        <ele>226.395204</ele>
-        <time>2007-08-19T12:58:49Z</time>
-        <fix>3d</fix>
-      </trkpt>
-      <trkpt lat="51.157505035" lon="14.946760178">
-        <ele>226.795199</ele>
-        <time>2007-08-19T12:58:50Z</time>
-        <fix>3d</fix>
-      </trkpt>
-      <trkpt lat="51.157562256" lon="14.946901321">
-        <ele>227.095199</ele>
-        <time>2007-08-19T12:58:51Z</time>
-        <fix>3d</fix>
-      </trkpt>
-      <trkpt lat="51.157630920" lon="14.947066307">
-        <ele>227.495193</ele>
-        <time>2007-08-19T12:58:52Z</time>
-        <fix>3d</fix>
-      </trkpt>
-      <trkpt lat="51.157707214" lon="14.947244644">
-        <ele>227.995200</ele>
-        <time>2007-08-19T12:58:53Z</time>
-        <fix>3d</fix>
-      </trkpt>
-      <trkpt lat="51.157794952" lon="14.947442055">
-        <ele>228.495206</ele>
-        <time>2007-08-19T12:58:54Z</time>
-        <fix>3d</fix>
-      </trkpt>
-      <trkpt lat="51.157894135" lon="14.947673798">
-        <ele>228.695194</ele>
-        <time>2007-08-19T12:58:55Z</time>
-        <fix>3d</fix>
-      </trkpt>
-      <trkpt lat="51.157993317" lon="14.947897911">
-        <ele>229.295195</ele>
-        <time>2007-08-19T12:58:56Z</time>
-        <fix>3d</fix>
-      </trkpt>
-      <trkpt lat="51.158100128" lon="14.948138237">
-        <ele>229.795201</ele>
-        <time>2007-08-19T12:58:57Z</time>
-        <fix>3d</fix>
-      </trkpt>
-      <trkpt lat="51.158210754" lon="14.948388100">
-        <ele>230.595208</ele>
-        <time>2007-08-19T12:58:58Z</time>
-        <fix>3d</fix>
-      </trkpt>
-      <trkpt lat="51.158329010" lon="14.948653221">
-        <ele>231.695197</ele>
-        <time>2007-08-19T12:58:59Z</time>
-        <fix>3d</fix>
-      </trkpt>
-      <trkpt lat="51.158447266" lon="14.948929787">
-        <ele>232.695192</ele>
-        <time>2007-08-19T12:59:00Z</time>
-        <fix>3d</fix>
-      </trkpt>
-      <trkpt lat="51.158573151" lon="14.949225426">
-        <ele>233.495199</ele>
-        <time>2007-08-19T12:59:01Z</time>
-        <fix>3d</fix>
-      </trkpt>
-      <trkpt lat="51.158695221" lon="14.949535370">
-        <ele>234.295206</ele>
-        <time>2007-08-19T12:59:02Z</time>
-        <fix>3d</fix>
-      </trkpt>
-      <trkpt lat="51.158817291" lon="14.949858665">
-        <ele>234.795194</ele>
-        <time>2007-08-19T12:59:03Z</time>
-        <fix>3d</fix>
-      </trkpt>
-      <trkpt lat="51.158943176" lon="14.950191498">
-        <ele>235.495207</ele>
-        <time>2007-08-19T12:59:04Z</time>
-        <fix>3d</fix>
-      </trkpt>
-      <trkpt lat="51.159076691" lon="14.950534821">
-        <ele>236.195202</ele>
-        <time>2007-08-19T12:59:05Z</time>
-        <fix>3d</fix>
-      </trkpt>
-      <trkpt lat="51.159214020" lon="14.950886726">
-        <ele>237.495197</ele>
-        <time>2007-08-19T12:59:06Z</time>
-        <fix>3d</fix>
-      </trkpt>
-      <trkpt lat="51.159355164" lon="14.951239586">
-        <ele>239.195204</ele>
-        <time>2007-08-19T12:59:07Z</time>
-        <fix>3d</fix>
-      </trkpt>
-      <trkpt lat="51.159496307" lon="14.951588631">
-        <ele>241.095200</ele>
-        <time>2007-08-19T12:59:08Z</time>
-        <fix>3d</fix>
-      </trkpt>
-      <trkpt lat="51.159641266" lon="14.951932907">
-        <ele>243.295196</ele>
-        <time>2007-08-19T12:59:09Z</time>
-        <fix>3d</fix>
-      </trkpt>
-      <trkpt lat="51.159790039" lon="14.952276230">
-        <ele>245.795192</ele>
-        <time>2007-08-19T12:59:10Z</time>
-        <fix>3d</fix>
-      </trkpt>
-      <trkpt lat="51.159934998" lon="14.952618599">
-        <ele>248.695201</ele>
-        <time>2007-08-19T12:59:11Z</time>
-        <fix>3d</fix>
-      </trkpt>
-      <trkpt lat="51.160072327" lon="14.952955246">
-        <ele>251.995205</ele>
-        <time>2007-08-19T12:59:12Z</time>
-        <fix>3d</fix>
-      </trkpt>
-      <trkpt lat="51.160213470" lon="14.953289986">
-        <ele>255.495196</ele>
-        <time>2007-08-19T12:59:13Z</time>
-        <fix>3d</fix>
-      </trkpt>
-      <trkpt lat="51.160350800" lon="14.953624725">
-        <ele>258.895193</ele>
-        <time>2007-08-19T12:59:14Z</time>
-        <fix>3d</fix>
-      </trkpt>
-      <trkpt lat="51.160488129" lon="14.953963280">
-        <ele>261.695208</ele>
-        <time>2007-08-19T12:59:15Z</time>
-        <fix>3d</fix>
-      </trkpt>
-      <trkpt lat="51.160617828" lon="14.954303741">
-        <ele>264.395192</ele>
-        <time>2007-08-19T12:59:16Z</time>
-        <fix>3d</fix>
-      </trkpt>
-      <trkpt lat="51.160747528" lon="14.954645157">
-        <ele>267.295201</ele>
-        <time>2007-08-19T12:59:17Z</time>
-        <fix>3d</fix>
-      </trkpt>
-      <trkpt lat="51.160881042" lon="14.954983711">
-        <ele>270.395198</ele>
-        <time>2007-08-19T12:59:18Z</time>
-        <fix>3d</fix>
-      </trkpt>
-      <trkpt lat="51.161022186" lon="14.955316544">
-        <ele>273.195194</ele>
-        <time>2007-08-19T12:59:19Z</time>
-        <fix>3d</fix>
-      </trkpt>
-      <trkpt lat="51.161178589" lon="14.955635071">
-        <ele>275.995191</ele>
-        <time>2007-08-19T12:59:20Z</time>
-        <fix>3d</fix>
-      </trkpt>
-      <trkpt lat="51.161357880" lon="14.955931664">
-        <ele>278.595200</ele>
-        <time>2007-08-19T12:59:21Z</time>
-        <fix>3d</fix>
-      </trkpt>
-      <trkpt lat="51.161560059" lon="14.956205368">
-        <ele>280.695202</ele>
-        <time>2007-08-19T12:59:22Z</time>
-        <fix>3d</fix>
-      </trkpt>
-      <trkpt lat="51.161781311" lon="14.956457138">
-        <ele>282.595197</ele>
-        <time>2007-08-19T12:59:23Z</time>
-        <fix>3d</fix>
-      </trkpt>
-      <trkpt lat="51.162021637" lon="14.956686974">
-        <ele>284.295205</ele>
-        <time>2007-08-19T12:59:24Z</time>
-        <fix>3d</fix>
-      </trkpt>
-      <trkpt lat="51.162273407" lon="14.956892967">
-        <ele>285.695194</ele>
-        <time>2007-08-19T12:59:25Z</time>
-        <fix>3d</fix>
-      </trkpt>
-      <trkpt lat="51.162536621" lon="14.957079887">
-        <ele>287.895209</ele>
-        <time>2007-08-19T12:59:26Z</time>
-        <fix>3d</fix>
-      </trkpt>
-      <trkpt lat="51.162807465" lon="14.957256317">
-        <ele>290.695205</ele>
-        <time>2007-08-19T12:59:27Z</time>
-        <fix>3d</fix>
-      </trkpt>
-      <trkpt lat="51.163074493" lon="14.957431793">
-        <ele>293.695208</ele>
-        <time>2007-08-19T12:59:28Z</time>
-        <fix>3d</fix>
-      </trkpt>
-      <trkpt lat="51.163345337" lon="14.957610130">
-        <ele>295.795192</ele>
-        <time>2007-08-19T12:59:29Z</time>
-        <fix>3d</fix>
-      </trkpt>
-      <trkpt lat="51.163616180" lon="14.957793236">
-        <ele>297.195199</ele>
-        <time>2007-08-19T12:59:30Z</time>
-        <fix>3d</fix>
-      </trkpt>
-      <trkpt lat="51.163887024" lon="14.957975388">
-        <ele>299.395195</ele>
-        <time>2007-08-19T12:59:31Z</time>
-        <fix>3d</fix>
-      </trkpt>
-      <trkpt lat="51.164154053" lon="14.958160400">
-        <ele>302.095198</ele>
-        <time>2007-08-19T12:59:32Z</time>
-        <fix>3d</fix>
-      </trkpt>
-      <trkpt lat="51.164432526" lon="14.958343506">
-        <ele>303.395193</ele>
-        <time>2007-08-19T12:59:33Z</time>
-        <fix>3d</fix>
-      </trkpt>
-      <trkpt lat="51.164714813" lon="14.958523750">
-        <ele>304.595194</ele>
-        <time>2007-08-19T12:59:34Z</time>
-        <fix>3d</fix>
-      </trkpt>
-      <trkpt lat="51.164993286" lon="14.958703041">
-        <ele>306.595202</ele>
-        <time>2007-08-19T12:59:35Z</time>
-        <fix>3d</fix>
-      </trkpt>
-      <trkpt lat="51.165271759" lon="14.958887100">
-        <ele>309.295205</ele>
-        <time>2007-08-19T12:59:36Z</time>
-        <fix>3d</fix>
-      </trkpt>
-      <trkpt lat="51.165546417" lon="14.959076881">
-        <ele>312.395183</ele>
-        <time>2007-08-19T12:59:37Z</time>
-        <fix>3d</fix>
-      </trkpt>
-      <trkpt lat="51.165813446" lon="14.959269524">
-        <ele>315.795199</ele>
-        <time>2007-08-19T12:59:38Z</time>
-        <fix>3d</fix>
-      </trkpt>
-      <trkpt lat="51.166065216" lon="14.959473610">
-        <ele>319.795215</ele>
-        <time>2007-08-19T12:59:39Z</time>
-        <fix>3d</fix>
-      </trkpt>
-      <trkpt lat="51.166313171" lon="14.959686279">
-        <ele>324.295182</ele>
-        <time>2007-08-19T12:59:40Z</time>
-        <fix>3d</fix>
-      </trkpt>
-      <trkpt lat="51.166557312" lon="14.959908485">
-        <ele>329.495200</ele>
-        <time>2007-08-19T12:59:41Z</time>
-        <fix>3d</fix>
-      </trkpt>
-      <trkpt lat="51.166797638" lon="14.960133553">
-        <ele>334.795192</ele>
-        <time>2007-08-19T12:59:42Z</time>
-        <fix>3d</fix>
-      </trkpt>
-      <trkpt lat="51.167030334" lon="14.960358620">
-        <ele>339.495185</ele>
-        <time>2007-08-19T12:59:43Z</time>
-        <fix>3d</fix>
-      </trkpt>
-      <trkpt lat="51.167259216" lon="14.960584641">
-        <ele>344.095201</ele>
-        <time>2007-08-19T12:59:44Z</time>
-        <fix>3d</fix>
-      </trkpt>
-      <trkpt lat="51.167484283" lon="14.960804939">
-        <ele>348.295206</ele>
-        <time>2007-08-19T12:59:45Z</time>
-        <fix>3d</fix>
-      </trkpt>
-      <trkpt lat="51.167705536" lon="14.961028099">
-        <ele>351.895209</ele>
-        <time>2007-08-19T12:59:46Z</time>
-        <fix>3d</fix>
-      </trkpt>
-      <trkpt lat="51.167922974" lon="14.961256981">
-        <ele>355.295188</ele>
-        <time>2007-08-19T12:59:47Z</time>
-        <fix>3d</fix>
-      </trkpt>
-      <trkpt lat="51.168136597" lon="14.961489677">
-        <ele>358.395203</ele>
-        <time>2007-08-19T12:59:48Z</time>
-        <fix>3d</fix>
-      </trkpt>
-      <trkpt lat="51.168350220" lon="14.961730003">
-        <ele>360.995193</ele>
-        <time>2007-08-19T12:59:49Z</time>
-        <fix>3d</fix>
-      </trkpt>
-      <trkpt lat="51.168563843" lon="14.961977005">
-        <ele>363.695196</ele>
-        <time>2007-08-19T12:59:50Z</time>
-        <fix>3d</fix>
-      </trkpt>
-      <trkpt lat="51.168769836" lon="14.962231636">
-        <ele>367.095212</ele>
-        <time>2007-08-19T12:59:51Z</time>
-        <fix>3d</fix>
-      </trkpt>
-      <trkpt lat="51.168968201" lon="14.962492943">
-        <ele>370.895203</ele>
-        <time>2007-08-19T12:59:52Z</time>
-        <fix>3d</fix>
-      </trkpt>
-      <trkpt lat="51.169162750" lon="14.962761879">
-        <ele>374.795207</ele>
-        <time>2007-08-19T12:59:53Z</time>
-        <fix>3d</fix>
-      </trkpt>
-      <trkpt lat="51.169353485" lon="14.963031769">
-        <ele>378.895198</ele>
-        <time>2007-08-19T12:59:54Z</time>
-        <fix>3d</fix>
-      </trkpt>
-      <trkpt lat="51.169544220" lon="14.963293076">
-        <ele>383.295190</ele>
-        <time>2007-08-19T12:59:55Z</time>
-        <fix>3d</fix>
-      </trkpt>
-      <trkpt lat="51.169734955" lon="14.963551521">
-        <ele>386.995206</ele>
-        <time>2007-08-19T12:59:56Z</time>
-        <fix>3d</fix>
-      </trkpt>
-      <trkpt lat="51.169929504" lon="14.963801384">
-        <ele>390.095184</ele>
-        <time>2007-08-19T12:59:57Z</time>
-        <fix>3d</fix>
-      </trkpt>
-      <trkpt lat="51.170120239" lon="14.964044571">
-        <ele>392.995212</ele>
-        <time>2007-08-19T12:59:58Z</time>
-        <fix>3d</fix>
-      </trkpt>
-      <trkpt lat="51.170314789" lon="14.964282990">
-        <ele>395.595202</ele>
-        <time>2007-08-19T12:59:59Z</time>
-        <fix>3d</fix>
-      </trkpt>
-      <trkpt lat="51.170513153" lon="14.964521408">
-        <ele>397.995204</ele>
-        <time>2007-08-19T13:00:00Z</time>
-        <fix>3d</fix>
-      </trkpt>
-      <trkpt lat="51.170711517" lon="14.964761734">
-        <ele>400.095207</ele>
-        <time>2007-08-19T13:00:01Z</time>
-        <fix>3d</fix>
-      </trkpt>
-    </trkseg>
-  </trk>
-</gpx>
diff --git a/reference/pocketfms_fp.gpx b/reference/pocketfms_fp.gpx
deleted file mode 100644 (file)
index ddeef79..0000000
+++ /dev/null
@@ -1,49 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<gpx version="1.0" creator="GPSBabel - https://www.gpsbabel.org" xmlns="http://www.topografix.com/GPX/1/0">
-  <time>1970-01-01T00:00:00Z</time>
-  <bounds minlat="51.158882000" minlon="14.902600000" maxlat="51.363167000" maxlon="14.952033000"/>
-  <wpt lat="51.158882000" lon="14.950277000">
-    <ele>237.134</ele>
-    <name>EDBX</name>
-    <cmt>EDBX</cmt>
-    <desc>EDBX</desc>
-  </wpt>
-  <wpt lat="51.302700000" lon="14.902600000">
-    <ele>609.600</ele>
-    <name>Horka,NOL(GM)</name>
-    <cmt>Horka,NOL(GM)</cmt>
-    <desc>Horka,NOL(GM)</desc>
-  </wpt>
-  <wpt lat="51.343624000" lon="14.952033000">
-    <ele>609.600</ele>
-    <name>RO(EDBR)-N</name>
-    <cmt>RO(EDBR)-N</cmt>
-    <desc>RO(EDBR)-N</desc>
-  </wpt>
-  <wpt lat="51.363167000" lon="14.950000000">
-    <ele>609.600</ele>
-    <name>EDBR</name>
-    <cmt>EDBR</cmt>
-    <desc>EDBR</desc>
-  </wpt>
-  <rte>
-    <name>EDBX - EDBR</name>
-    <desc>PocketFMS flightplan</desc>
-    <rtept lat="51.158882000" lon="14.950277000">
-      <ele>237.134</ele>
-      <name>EDBX</name>
-    </rtept>
-    <rtept lat="51.302700000" lon="14.902600000">
-      <ele>609.600</ele>
-      <name>Horka,NOL(GM)</name>
-    </rtept>
-    <rtept lat="51.343624000" lon="14.952033000">
-      <ele>609.600</ele>
-      <name>RO(EDBR)-N</name>
-    </rtept>
-    <rtept lat="51.363167000" lon="14.950000000">
-      <ele>157.582</ele>
-      <name>EDBR</name>
-    </rtept>
-  </rte>
-</gpx>
diff --git a/reference/pocketfms_fp.xml b/reference/pocketfms_fp.xml
deleted file mode 100644 (file)
index a21f015..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>\r
-<PocketFMSFlightplan xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://www.PocketFMS.com/XMLSchema/PocketFMSNavlog-1.2.0.xsd"><META><TakeOffDateUTC>2009-03-03</TakeOffDateUTC><DOF>090303</DOF><TakeOffTimeUTC>10:05:00</TakeOffTimeUTC><ICAOETD Value="1005" Unit="HHMM"/><ICAOTOTALEET Value="0009" Unit="HHMM"/><TOTALEET Value="00:09" Unit="h:m"/><Departure><StringIdent>EDBX GORLITZ GORLITZ</StringIdent><Latitude>51.158882</Latitude><Longitude>14.950277</Longitude><FriendlyShortname>EDBX</FriendlyShortname><Fullname>Gorlitz</Fullname><Elevation>778</Elevation><RNAV1 BEACONIDENT="OKX" BEACONFREQUENCY="114.85" BEACONRADIAL="346.701874" BEACONDISTANCENM="15.677554"/><RNAV2 BEACONIDENT="HDO" BEACONFREQUENCY="115.00" BEACONRADIAL="55.517551" BEACONDISTANCENM="25.938663"/><DetailedObjectInfo><AirportData><Cityname>GORLITZ</Cityname><type></type><agency></agency><fuel></fuel><oil></oil><HasPrecisionApproachYN></HasPrecisionApproachYN><HasNonPrecisionApproachYN></HasNonPrecisionApproachYN><HasVFRReportingPointsYN></HasVFRReportingPointsYN><LongestHardRunway Value="0"/><LongestSoftRunway Value="2461"/><HasWaterRunwayYN></HasWaterRunwayYN><IsAbandonedYN></IsAbandonedYN><AllowedAircraftTypes></AllowedAircraftTypes><HasMetarTafYN></HasMetarTafYN><PPRYN></PPRYN><EmergencyUseOnlyYN></EmergencyUseOnlyYN><VisibleButDestroyedYN></VisibleButDestroyedYN></AirportData><Communications><COMM CommType="INFO" Freq1="122.000" Freq2="0.000" Freq3="0.000" Freq4="0.000" Freq5="0.000" Sector="" OprHrs="" CommRemarks=""/></Communications></DetailedObjectInfo></Departure><Arrival><StringIdent>EDBR ROTHENBURG GORLITZ ROTHENBURG/GORLITZ</StringIdent><Latitude>51.363167</Latitude><Longitude>14.950000</Longitude><FriendlyShortname>EDBR</FriendlyShortname><Fullname>ROTHENBURG GORLITZ</Fullname><Elevation>00517</Elevation><RNAV1 BEACONIDENT="OKX" BEACONFREQUENCY="114.85" BEACONRADIAL="351.663544" BEACONDISTANCENM="27.800840"/><RNAV2 BEACONIDENT="HDO" BEACONFREQUENCY="115.00" BEACONRADIAL="37.742104" BEACONDISTANCENM="34.056461"/><DetailedObjectInfo><AirportData><Cityname>ROTHENBURG/GORLITZ</Cityname><type>D</type><agency>CI</agency><fuel></fuel><oil></oil><HasPrecisionApproachYN></HasPrecisionApproachYN><HasNonPrecisionApproachYN></HasNonPrecisionApproachYN><HasVFRReportingPointsYN>N</HasVFRReportingPointsYN><LongestHardRunway Value="8202"/><LongestSoftRunway Value="4003"/><HasWaterRunwayYN>N</HasWaterRunwayYN><IsAbandonedYN></IsAbandonedYN><AllowedAircraftTypes></AllowedAircraftTypes><HasMetarTafYN></HasMetarTafYN><PPRYN></PPRYN><EmergencyUseOnlyYN></EmergencyUseOnlyYN><VisibleButDestroyedYN></VisibleButDestroyedYN></AirportData><Communications><COMM CommType="AAS" Freq1="125.800" Freq2="0.000" Freq3="0.000" Freq4="0.000" Freq5="0.000" Sector="" OprHrs="" CommRemarks=""/><COMM CommType="INFO" Freq1="123.250" Freq2="0.000" Freq3="0.000" Freq4="0.000" Freq5="0.000" Sector="3NM 3000 FT. AGL" OprHrs="" CommRemarks=""/></Communications><Remarks><Remark RemarkType="CAUTION" RemarkText="Gldr, ultralgt, model acft, balloon and PJE act."/><Remark RemarkType="CSTMS/IMG" RemarkText="CSTMS avbl PPR (24 hr PN, dur afld opr hr)."/><Remark RemarkType="FUEL" RemarkText="(NC 100LL, A1)"/><Remark RemarkType="OPR HOURS" RemarkText="Opr 0900-1500Z, O/T 24 hr PPR (0800-1600Z or SS+30, OT 24 hr PPR DT)."/><Remark RemarkType="WEB" RemarkText="&lt;a href=http://www.flugplatz-rothenburg-goerlitz.de/&gt;http://www.flugplatz-rothenburg-goerlitz.de/&lt;/a&gt;"/></Remarks></DetailedObjectInfo></Arrival><AircraftIdentification></AircraftIdentification><RoutingString>DCT OKX347024 DCT OKX352027</RoutingString><FlightRules>V</FlightRules><FlightType>G</FlightType><AircraftType></AircraftType><WakeTurbulence>L</WakeTurbulence><Equipment></Equipment><Transponder></Transponder><AircraftColorAndMarkings></AircraftColorAndMarkings><PilotInCommand>TOBIAS KRETSCHMAR</PilotInCommand><PilotInCommandCompany></PilotInCommandCompany><PilotInCommandMobilePhone>+491739170322</PilotInCommandMobilePhone><PilotInCommandPhone>+493584227200</PilotInCommandPhone><PilotInCommandFax>+493584227263</PilotInCommandFax><FlightRemarks></FlightRemarks><FlightPlanOtherInformation></FlightPlanOtherInformation><ICAOEndurance Value="0410" Unit="HHMM"/><ICAOCruiseAltitude>A020</ICAOCruiseAltitude></META><FUEL><TotalTripFuel Value="2.700000" Unit="ltr"/><TaxiAndDepartureFuel Value="2.500000" Unit="ltr"/><ArrivalAndTaxiFuel Value="2.500000" Unit="ltr"/><AlternateApproachFuel Value="2.500000" Unit="ltr"/><ReserveFuel Value="15.000000" Unit="ltr" Duration="60" DurationUnit="min"/><ContingencyFuel Value="0.000000" Unit="ltr" Percentage="0"/><LoadedFuel Value="63.380280" Unit="ltr"/><TotalFuel Value="27.442703" Unit="ltr"/><LongestAlternateFuel Value="2.242704" Unit="ltr"/><LongestAlternateDistance Value="27.715340" Unit="km"/></FUEL><SUPPLEMENTARYINFORMATION><Endurance Value="04:10" Unit="h:m"/><POB>001</POB><bRadio>0</bRadio><bRadioUHF>0</bRadioUHF><bRadioVHF>0</bRadioVHF><bRadioELBA>0</bRadioELBA><bSurvivalEquipment>0</bSurvivalEquipment><bSurvivalPolar>0</bSurvivalPolar><bSurvivalDesert>0</bSurvivalDesert><bSurvivalMaritime>0</bSurvivalMaritime><bSurvivalJungle>0</bSurvivalJungle><bJackets>0</bJackets><bJacketsLights>0</bJacketsLights><bJacketsFluores>0</bJacketsFluores><bJacketsUHF>0</bJacketsUHF><bJacketsVHF>0</bJacketsVHF><bDinghies>0</bDinghies><DinghiesNumber></DinghiesNumber><DinghiesCapacity></DinghiesCapacity><bDinghiesCover>0</bDinghiesCover><DinghiesCoverColor></DinghiesCoverColor></SUPPLEMENTARYINFORMATION><LIB LibID="1"><FromPoint><StringIdent>EDBX GORLITZ GORLITZ</StringIdent><Latitude>51.158882</Latitude><Longitude>14.950277</Longitude><FriendlyShortname>EDBX</FriendlyShortname><Fullname>Gorlitz</Fullname><Elevation>778</Elevation><RNAV1 BEACONIDENT="OKX" BEACONFREQUENCY="114.85" BEACONRADIAL="346.701874" BEACONDISTANCENM="15.677554"/><RNAV2 BEACONIDENT="HDO" BEACONFREQUENCY="115.00" BEACONRADIAL="55.517551" BEACONDISTANCENM="25.938663"/><DetailedObjectInfo><AirportData><Cityname>GORLITZ</Cityname><type></type><agency></agency><fuel></fuel><oil></oil><HasPrecisionApproachYN></HasPrecisionApproachYN><HasNonPrecisionApproachYN></HasNonPrecisionApproachYN><HasVFRReportingPointsYN></HasVFRReportingPointsYN><LongestHardRunway Value="0"/><LongestSoftRunway Value="2461"/><HasWaterRunwayYN></HasWaterRunwayYN><IsAbandonedYN></IsAbandonedYN><AllowedAircraftTypes></AllowedAircraftTypes><HasMetarTafYN></HasMetarTafYN><PPRYN></PPRYN><EmergencyUseOnlyYN></EmergencyUseOnlyYN><VisibleButDestroyedYN></VisibleButDestroyedYN></AirportData><Communications><COMM CommType="INFO" Freq1="122.000" Freq2="0.000" Freq3="0.000" Freq4="0.000" Freq5="0.000" Sector="" OprHrs="" CommRemarks=""/></Communications></DetailedObjectInfo></FromPoint><ToPoint><StringIdent>{x} HORKA,NOL(GM)</StringIdent><Latitude>51.302700</Latitude><Longitude>14.902600</Longitude><FriendlyShortname>Horka,NOL(GM)</FriendlyShortname><Fullname>Horka,NOL(GM)</Fullname><Elevation></Elevation><RNAV1 BEACONIDENT="OKX" BEACONFREQUENCY="114.85" BEACONRADIAL="346.577057" BEACONDISTANCENM="24.490610"/><RNAV2 BEACONIDENT="HDO" BEACONFREQUENCY="115.00" BEACONRADIAL="39.610226" BEACONDISTANCENM="30.154068"/></ToPoint><ETAUTC>10:12:12</ETAUTC><MSA Value="3200" Unit="ft"/><PlannedAltitude Value="2000" Unit="ft"/><OAT Value="15" Unit="°C"/><IAS Value="180" Unit="kmh"/><QNH Value="1013" Unit="mb"/><TAS Value="185" Unit="kmh"/><ALTERNATEIDENT>EDCI</ALTERNATEIDENT><ALTERNATEDISTANCE Value="27.715340" Unit="km"/><FUEL Value="2.300000" Unit="ltr"/><WINDDIRECTION Value="360" Unit="°M"/><WINDSPEED Value="0" Unit="kmh"/><AVARAGEVARIATION>3</AVARAGEVARIATION><ETE Value="00:06:26" Unit="h:m"/><ETECUMMULATIVE Value="00:06:26" Unit="h:m"/><TRUETRACK Value="348" Unit="tt"/><MAGNETICTRACK Value="345" Unit="mt"/><WINDCORRECTIONANGLE>0R</WINDCORRECTIONANGLE><TRUEHEADING Value="348" Unit="th"/><MAGNETICHEADING Value="345" Unit="th"/><GROUNDSPEED Value="185" Unit="kmh"/><DistanceCummulative Value="16.299999" Unit="km"/><Distance Value="16.299999" Unit="km"/><WXSignificant></WXSignificant><WXMETAR></WXMETAR><WXSHORTTAF></WXSHORTTAF><WXLONGTAF></WXLONGTAF><WXALLTAF></WXALLTAF><AirspacesCrossed><Airspace><AirspaceEntryPoint><Latitude>51.158882</Latitude><Longitude>14.950277</Longitude><ETECUMMULATIVE Value="00:00:00" Unit="h:m"/><ETAUTC>00:00:00</ETAUTC></AirspaceEntryPoint><AirspaceName>MUNCHEN FIR</AirspaceName><AirspaceType>08</AirspaceType><AirspaceComm1></AirspaceComm1><AirspaceComm2></AirspaceComm2><AirspaceCommName></AirspaceCommName><AirspaceCommAuth></AirspaceCommAuth><AirspaceLowerAltFt>GND</AirspaceLowerAltFt><AirspaceUpperAltFt>FL 245</AirspaceUpperAltFt><AirspaceClass></AirspaceClass><AirspaceClassRemarks></AirspaceClassRemarks><AirspaceSUASIdentifier></AirspaceSUASIdentifier><AirspaceRemarks></AirspaceRemarks><AirspaceActivity></AirspaceActivity><AirspaceActiveFromDateTime></AirspaceActiveFromDateTime><AirspaceActiveUpToDateTime></AirspaceActiveUpToDateTime></Airspace></AirspacesCrossed></LIB><LIB LibID="2"><FromPoint><StringIdent>{x} HORKA,NOL(GM)</StringIdent><Latitude>51.302700</Latitude><Longitude>14.902600</Longitude><FriendlyShortname>Horka,NOL(GM)</FriendlyShortname><Fullname>Horka,NOL(GM)</Fullname><Elevation></Elevation><RNAV1 BEACONIDENT="OKX" BEACONFREQUENCY="114.85" BEACONRADIAL="346.577057" BEACONDISTANCENM="24.490610"/><RNAV2 BEACONIDENT="HDO" BEACONFREQUENCY="115.00" BEACONRADIAL="39.610226" BEACONDISTANCENM="30.154068"/></FromPoint><ToPoint><StringIdent>RO(EDBR)-NDB ROTHENBURG</StringIdent><Latitude>51.343624</Latitude><Longitude>14.952033</Longitude><FriendlyShortname>RO(EDBR)-N</FriendlyShortname><Fullname>ROTHENBURG</Fullname><Elevation>U</Elevation><RNAV1 BEACONIDENT="OKX" BEACONFREQUENCY="114.85" BEACONRADIAL="351.545258" BEACONDISTANCENM="26.627037"/><RNAV2 BEACONIDENT="HDO" BEACONFREQUENCY="115.00" BEACONRADIAL="39.148022" BEACONDISTANCENM="33.219891"/></ToPoint><ETAUTC>10:14:02</ETAUTC><MSA Value="3200" Unit="ft"/><PlannedAltitude Value="2000" Unit="ft"/><OAT Value="15" Unit="°C"/><IAS Value="180" Unit="kmh"/><QNH Value="1013" Unit="mb"/><TAS Value="185" Unit="kmh"/><ALTERNATEIDENT>EDBX</ALTERNATEIDENT><ALTERNATEDISTANCE Value="20.529016" Unit="km"/><FUEL Value="0.400000" Unit="ltr"/><WINDDIRECTION Value="360" Unit="°M"/><WINDSPEED Value="0" Unit="kmh"/><AVARAGEVARIATION>3</AVARAGEVARIATION><ETE Value="00:01:50" Unit="h:m"/><ETECUMMULATIVE Value="00:08:16" Unit="h:m"/><TRUETRACK Value="37" Unit="tt"/><MAGNETICTRACK Value="34" Unit="mt"/><WINDCORRECTIONANGLE>0R</WINDCORRECTIONANGLE><TRUEHEADING Value="37" Unit="th"/><MAGNETICHEADING Value="34" Unit="th"/><GROUNDSPEED Value="185" Unit="kmh"/><DistanceCummulative Value="22.000000" Unit="km"/><Distance Value="5.700000" Unit="km"/><WXSignificant></WXSignificant><WXMETAR></WXMETAR><WXSHORTTAF></WXSHORTTAF><WXLONGTAF></WXLONGTAF><WXALLTAF></WXALLTAF><AirspacesCrossed><Airspace><AirspaceEntryPoint><Latitude>51.302700</Latitude><Longitude>14.902600</Longitude><ETECUMMULATIVE Value="00:00:00" Unit="h:m"/><ETAUTC>00:00:00</ETAUTC></AirspaceEntryPoint><AirspaceName>MUNCHEN FIR</AirspaceName><AirspaceType>08</AirspaceType><AirspaceComm1></AirspaceComm1><AirspaceComm2></AirspaceComm2><AirspaceCommName></AirspaceCommName><AirspaceCommAuth></AirspaceCommAuth><AirspaceLowerAltFt>GND</AirspaceLowerAltFt><AirspaceUpperAltFt>FL 245</AirspaceUpperAltFt><AirspaceClass></AirspaceClass><AirspaceClassRemarks></AirspaceClassRemarks><AirspaceSUASIdentifier></AirspaceSUASIdentifier><AirspaceRemarks></AirspaceRemarks><AirspaceActivity></AirspaceActivity><AirspaceActiveFromDateTime></AirspaceActiveFromDateTime><AirspaceActiveUpToDateTime></AirspaceActiveUpToDateTime></Airspace></AirspacesCrossed></LIB><LIB LibID="3"><FromPoint><StringIdent>RO(EDBR)-NDB ROTHENBURG</StringIdent><Latitude>51.343624</Latitude><Longitude>14.952033</Longitude><FriendlyShortname>RO(EDBR)-N</FriendlyShortname><Fullname>ROTHENBURG</Fullname><Elevation>U</Elevation><RNAV1 BEACONIDENT="OKX" BEACONFREQUENCY="114.85" BEACONRADIAL="351.545258" BEACONDISTANCENM="26.627037"/><RNAV2 BEACONIDENT="HDO" BEACONFREQUENCY="115.00" BEACONRADIAL="39.148022" BEACONDISTANCENM="33.219891"/></FromPoint><ToPoint><StringIdent>EDBR ROTHENBURG GORLITZ ROTHENBURG/GORLITZ</StringIdent><Latitude>51.363167</Latitude><Longitude>14.950000</Longitude><FriendlyShortname>EDBR</FriendlyShortname><Fullname>ROTHENBURG GORLITZ</Fullname><Elevation>00517</Elevation><RNAV1 BEACONIDENT="OKX" BEACONFREQUENCY="114.85" BEACONRADIAL="351.663544" BEACONDISTANCENM="27.800840"/><RNAV2 BEACONIDENT="HDO" BEACONFREQUENCY="115.00" BEACONRADIAL="37.742104" BEACONDISTANCENM="34.056461"/><DetailedObjectInfo><AirportData><Cityname>ROTHENBURG/GORLITZ</Cityname><type>D</type><agency>CI</agency><fuel></fuel><oil></oil><HasPrecisionApproachYN></HasPrecisionApproachYN><HasNonPrecisionApproachYN></HasNonPrecisionApproachYN><HasVFRReportingPointsYN>N</HasVFRReportingPointsYN><LongestHardRunway Value="8202"/><LongestSoftRunway Value="4003"/><HasWaterRunwayYN>N</HasWaterRunwayYN><IsAbandonedYN></IsAbandonedYN><AllowedAircraftTypes></AllowedAircraftTypes><HasMetarTafYN></HasMetarTafYN><PPRYN></PPRYN><EmergencyUseOnlyYN></EmergencyUseOnlyYN><VisibleButDestroyedYN></VisibleButDestroyedYN></AirportData><Communications><COMM CommType="AAS" Freq1="125.800" Freq2="0.000" Freq3="0.000" Freq4="0.000" Freq5="0.000" Sector="" OprHrs="" CommRemarks=""/><COMM CommType="INFO" Freq1="123.250" Freq2="0.000" Freq3="0.000" Freq4="0.000" Freq5="0.000" Sector="3NM 3000 FT. AGL" OprHrs="" CommRemarks=""/></Communications><Remarks><Remark RemarkType="CAUTION" RemarkText="Gldr, ultralgt, model acft, balloon and PJE act."/><Remark RemarkType="CSTMS/IMG" RemarkText="CSTMS avbl PPR (24 hr PN, dur afld opr hr)."/><Remark RemarkType="FUEL" RemarkText="(NC 100LL, A1)"/><Remark RemarkType="OPR HOURS" RemarkText="Opr 0900-1500Z, O/T 24 hr PPR (0800-1600Z or SS+30, OT 24 hr PPR DT)."/><Remark RemarkType="WEB" RemarkText="&lt;a href=http://www.flugplatz-rothenburg-goerlitz.de/&gt;http://www.flugplatz-rothenburg-goerlitz.de/&lt;/a&gt;"/></Remarks></DetailedObjectInfo></ToPoint><ETAUTC>10:14:44</ETAUTC><MSA Value="3200" Unit="ft"/><PlannedAltitude Value="2000" Unit="ft"/><OAT Value="15" Unit="°C"/><IAS Value="180" Unit="kmh"/><QNH Value="1013" Unit="mb"/><TAS Value="185" Unit="kmh"/><ALTERNATEIDENT>EDBX</ALTERNATEIDENT><ALTERNATEDISTANCE Value="22.700459" Unit="km"/><FUEL Value="0.000000" Unit="ltr"/><WINDDIRECTION Value="360" Unit="°M"/><WINDSPEED Value="0" Unit="kmh"/><AVARAGEVARIATION>3</AVARAGEVARIATION><ETE Value="00:00:42" Unit="h:m"/><ETECUMMULATIVE Value="00:08:58" Unit="h:m"/><TRUETRACK Value="356" Unit="tt"/><MAGNETICTRACK Value="353" Unit="mt"/><WINDCORRECTIONANGLE>0R</WINDCORRECTIONANGLE><TRUEHEADING Value="356" Unit="th"/><MAGNETICHEADING Value="353" Unit="th"/><GROUNDSPEED Value="185" Unit="kmh"/><DistanceCummulative Value="24.200001" Unit="km"/><Distance Value="2.200000" Unit="km"/><WXSignificant></WXSignificant><WXMETAR></WXMETAR><WXSHORTTAF></WXSHORTTAF><WXLONGTAF></WXLONGTAF><WXALLTAF></WXALLTAF><AirspacesCrossed><Airspace><AirspaceEntryPoint><Latitude>51.343624</Latitude><Longitude>14.952033</Longitude><ETECUMMULATIVE Value="00:00:00" Unit="h:m"/><ETAUTC>00:00:00</ETAUTC></AirspaceEntryPoint><AirspaceName>MUNCHEN FIR</AirspaceName><AirspaceType>08</AirspaceType><AirspaceComm1></AirspaceComm1><AirspaceComm2></AirspaceComm2><AirspaceCommName></AirspaceCommName><AirspaceCommAuth></AirspaceCommAuth><AirspaceLowerAltFt>GND</AirspaceLowerAltFt><AirspaceUpperAltFt>FL 245</AirspaceUpperAltFt><AirspaceClass></AirspaceClass><AirspaceClassRemarks></AirspaceClassRemarks><AirspaceSUASIdentifier></AirspaceSUASIdentifier><AirspaceRemarks></AirspaceRemarks><AirspaceActivity></AirspaceActivity><AirspaceActiveFromDateTime></AirspaceActiveFromDateTime><AirspaceActiveUpToDateTime></AirspaceActiveUpToDateTime></Airspace></AirspacesCrossed></LIB><AIRCRAFT><AircraftDescription>D-MVBB/Fascination</AircraftDescription><SpeedVx Value="100" Unit="kmh"/><SpeedVy Value="140" Unit="kmh"/><SpeedCruise Value="180" Unit="kmh"/><SpeedHolding Value="120" Unit="kmh"/><SpeedApproach Value="140" Unit="kmh"/><FuelConsumptionVx Value="24.000000" Unit="ltr"/><FuelConsumptionVy Value="18.000000" Unit="ltr"/><FuelConsumptionCruise Value="15.000000" Unit="ltr"/><FuelConsumptionHolding Value="10.000000" Unit="ltr"/><FuelConsumptionApproach Value="10.000000" Unit="ltr"/><AvarageRateOfDescend Value="400.000000" Unit="fpm"/><AvarageRateOfClimb Value="250.000000" Unit="fpm"/><SuitableDefinitions><CivilianAirports>1</CivilianAirports><MilitaryAirports>0</MilitaryAirports><JoinedAirports>1</JoinedAirports><ULMAirports>1</ULMAirports><GliderAirports>0</GliderAirports><HeliAirports>0</HeliAirports><WaterAirports>0</WaterAirports><MusthavePrecisionApproach>0</MusthavePrecisionApproach><MusthaveNonPrecisionApproach>0</MusthaveNonPrecisionApproach><MinimumHardRunwayLength Value="304.799988" Unit="mtr"/><MinimumSoftRunwayLength Value="304.799988" Unit="mtr"/><MinimumCloudbase Value="500.000000" Unit="ft"/><MaximumCrosswind Value="22.000000" Unit="kts"/></SuitableDefinitions><WeightAndBalance><WBData><WBDataRecord WBDescription="Wägebericht"><Weight Value="301.000031" Unit="KG"/><Arm Value="58.000000" Unit="CM"/><Moment Value="174.580017" Unit="KG.M"/></WBDataRecord><WBDataRecord WBDescription="Pilot"><Weight Value="85.000000" Unit="KG"/><Arm Value="120.000000" Unit="CM"/><Moment Value="102.000000" Unit="KG.M"/></WBDataRecord><WBDataRecord WBDescription="Passagier"><Weight Value="0.000000" Unit="KG"/><Arm Value="120.000000" Unit="CM"/><Moment Value="0.000000" Unit="KG.M"/></WBDataRecord><WBDataRecord WBDescription="Fuel"><Weight Value="45.000000" Unit="KG"/><Arm Value="40.000000" Unit="CM"/><Moment Value="18.000000" Unit="KG.M"/></WBDataRecord><WBDataRecord WBDescription="Gepäck"><Weight Value="0.000000" Unit="KG"/><Arm Value="180.000000" Unit="CM"/><Moment Value="0.000000" Unit="KG.M"/></WBDataRecord><PlaneTotalWeight Value="431.000031" Unit="KG"/><PlaneTotalArm Value="68.348022" Unit="CM"/><PlaneTotalMoment Value="294.580017" Unit="KG.M"/></WBData><WBCGLimits><WBMomentLimitPoint><YValue_Weight Value="300.999390" Unit="KG"/><XValue_CG Value="68.000000" Unit="CM"/></WBMomentLimitPoint><WBMomentLimitPoint><YValue_Weight Value="449.999939" Unit="KG"/><XValue_CG Value="68.000000" Unit="CM"/></WBMomentLimitPoint><WBMomentLimitPoint><YValue_Weight Value="449.999939" Unit="KG"/><XValue_CG Value="84.000000" Unit="CM"/></WBMomentLimitPoint><WBMomentLimitPoint><YValue_Weight Value="300.999390" Unit="KG"/><XValue_CG Value="84.000000" Unit="CM"/></WBMomentLimitPoint></WBCGLimits></WeightAndBalance></AIRCRAFT></PocketFMSFlightplan>\r
diff --git a/reference/pocketfms_wp.gpx b/reference/pocketfms_wp.gpx
deleted file mode 100644 (file)
index dc75e0f..0000000
+++ /dev/null
@@ -1,25 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<gpx version="1.0" creator="GPSBabel - https://www.gpsbabel.org" xmlns="http://www.topografix.com/GPX/1/0">
-  <time>1970-01-01T00:00:00Z</time>
-  <bounds minlat="51.158882000" minlon="14.902600000" maxlat="51.363167000" maxlon="14.952033000"/>
-  <wpt lat="51.158882000" lon="14.950277000">
-    <name>EDBX </name>
-    <cmt>EDBX </cmt>
-    <desc>EDBX </desc>
-  </wpt>
-  <wpt lat="51.302700000" lon="14.902600000">
-    <name>Horka,NOL(GM) </name>
-    <cmt>Horka,NOL(GM) </cmt>
-    <desc>Horka,NOL(GM) </desc>
-  </wpt>
-  <wpt lat="51.343624000" lon="14.952033000">
-    <name>RO(EDBR)-N </name>
-    <cmt>RO(EDBR)-N </cmt>
-    <desc>RO(EDBR)-N </desc>
-  </wpt>
-  <wpt lat="51.363167000" lon="14.950000000">
-    <name>EDBR </name>
-    <cmt>EDBR </cmt>
-    <desc>EDBR </desc>
-  </wpt>
-</gpx>
diff --git a/reference/pocketfms_wp.txt b/reference/pocketfms_wp.txt
deleted file mode 100644 (file)
index fe1bc75..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-EDBX 51.158882 14.950277
-Horka,NOL(GM) 51.302700 14.902600
-RO(EDBR)-N 51.343624 14.952033
-EDBR 51.363167 14.950000
diff --git a/reference/skyforce.gpx b/reference/skyforce.gpx
deleted file mode 100644 (file)
index 5dde404..0000000
+++ /dev/null
@@ -1,900 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<gpx version="1.0" creator="GPSBabel - https://www.gpsbabel.org" xmlns="http://www.topografix.com/GPX/1/0">
-  <time>1970-01-01T00:00:00Z</time>
-  <bounds minlat="30.045500000" minlon="-91.610500000" maxlat="42.468666667" maxlon="-71.103000000"/>
-  <wpt lat="42.438833333" lon="-71.119333333">
-    <name>5066</name>
-    <cmt>5066</cmt>
-    <desc>5066</desc>
-  </wpt>
-  <wpt lat="42.439166667" lon="-71.119666667">
-    <name>5067</name>
-    <cmt>5067</cmt>
-    <desc>5067</desc>
-  </wpt>
-  <wpt lat="42.439000000" lon="-71.116166667">
-    <name>5096</name>
-    <cmt>5096</cmt>
-    <desc>5096</desc>
-  </wpt>
-  <wpt lat="42.443833333" lon="-71.122000000">
-    <name>5142</name>
-    <cmt>5142</cmt>
-    <desc>5142</desc>
-  </wpt>
-  <wpt lat="42.447333333" lon="-71.121500000">
-    <name>5156</name>
-    <cmt>5156</cmt>
-    <desc>5156</desc>
-  </wpt>
-  <wpt lat="42.454833333" lon="-71.125166667">
-    <name>5224</name>
-    <cmt>5224</cmt>
-    <desc>5224</desc>
-  </wpt>
-  <wpt lat="42.459000000" lon="-71.125000000">
-    <name>5229</name>
-    <cmt>5229</cmt>
-    <desc>5229</desc>
-  </wpt>
-  <wpt lat="42.457000000" lon="-71.124500000">
-    <name>5237</name>
-    <cmt>5237</cmt>
-    <desc>5237</desc>
-  </wpt>
-  <wpt lat="42.454333333" lon="-71.121000000">
-    <name>5254</name>
-    <cmt>5254</cmt>
-    <desc>5254</desc>
-  </wpt>
-  <wpt lat="42.451500000" lon="-71.121666667">
-    <name>5258</name>
-    <cmt>5258</cmt>
-    <desc>5258</desc>
-  </wpt>
-  <wpt lat="42.454333333" lon="-71.120666667">
-    <name>5264</name>
-    <cmt>5264</cmt>
-    <desc>5264</desc>
-  </wpt>
-  <wpt lat="42.457833333" lon="-71.121000000">
-    <name>526708</name>
-    <cmt>526708</cmt>
-    <desc>526708</desc>
-  </wpt>
-  <wpt lat="42.457166667" lon="-71.120333333">
-    <name>526750</name>
-    <cmt>526750</cmt>
-    <desc>526750</desc>
-  </wpt>
-  <wpt lat="42.456666667" lon="-71.119666667">
-    <name>527614</name>
-    <cmt>527614</cmt>
-    <desc>527614</desc>
-  </wpt>
-  <wpt lat="42.456333333" lon="-71.119333333">
-    <name>527631</name>
-    <cmt>527631</cmt>
-    <desc>527631</desc>
-  </wpt>
-  <wpt lat="42.458166667" lon="-71.119166667">
-    <name>5278</name>
-    <cmt>5278</cmt>
-    <desc>5278</desc>
-  </wpt>
-  <wpt lat="42.459333333" lon="-71.117666667">
-    <name>5289</name>
-    <cmt>5289</cmt>
-    <desc>5289</desc>
-  </wpt>
-  <wpt lat="42.464166667" lon="-71.119833333">
-    <name>5374FIRE</name>
-    <cmt>5374FIRE</cmt>
-    <desc>5374FIRE</desc>
-  </wpt>
-  <wpt lat="42.465666667" lon="-71.119333333">
-    <name>5376</name>
-    <cmt>5376</cmt>
-    <desc>5376</desc>
-  </wpt>
-  <wpt lat="42.439000000" lon="-71.114500000">
-    <name>6006</name>
-    <cmt>6006</cmt>
-    <desc>6006</desc>
-  </wpt>
-  <wpt lat="42.438666667" lon="-71.114833333">
-    <name>6006BLUE</name>
-    <cmt>6006BLUE</cmt>
-    <desc>6006BLUE</desc>
-  </wpt>
-  <wpt lat="42.436833333" lon="-71.113166667">
-    <name>6014MEADW</name>
-    <cmt>6014MEADW</cmt>
-    <desc>6014MEADW</desc>
-  </wpt>
-  <wpt lat="42.441833333" lon="-71.113166667">
-    <name>6029</name>
-    <cmt>6029</cmt>
-    <desc>6029</desc>
-  </wpt>
-  <wpt lat="42.436166667" lon="-71.109000000">
-    <name>6053</name>
-    <cmt>6053</cmt>
-    <desc>6053</desc>
-  </wpt>
-  <wpt lat="42.439333333" lon="-71.107500000">
-    <name>6066</name>
-    <cmt>6066</cmt>
-    <desc>6066</desc>
-  </wpt>
-  <wpt lat="42.439833333" lon="-71.107500000">
-    <name>6067</name>
-    <cmt>6067</cmt>
-    <desc>6067</desc>
-  </wpt>
-  <wpt lat="42.434833333" lon="-71.105833333">
-    <name>6071</name>
-    <cmt>6071</cmt>
-    <desc>6071</desc>
-  </wpt>
-  <wpt lat="42.433333333" lon="-71.106666667">
-    <name>6073</name>
-    <cmt>6073</cmt>
-    <desc>6073</desc>
-  </wpt>
-  <wpt lat="42.437333333" lon="-71.104833333">
-    <name>6084</name>
-    <cmt>6084</cmt>
-    <desc>6084</desc>
-  </wpt>
-  <wpt lat="42.442166667" lon="-71.111000000">
-    <name>6130</name>
-    <cmt>6130</cmt>
-    <desc>6130</desc>
-  </wpt>
-  <wpt lat="42.443000000" lon="-71.111500000">
-    <name>6131</name>
-    <cmt>6131</cmt>
-    <desc>6131</desc>
-  </wpt>
-  <wpt lat="42.444833333" lon="-71.108833333">
-    <name>6153</name>
-    <cmt>6153</cmt>
-    <desc>6153</desc>
-  </wpt>
-  <wpt lat="42.443666667" lon="-71.106333333">
-    <name>6171</name>
-    <cmt>6171</cmt>
-    <desc>6171</desc>
-  </wpt>
-  <wpt lat="42.447833333" lon="-71.106666667">
-    <name>6176</name>
-    <cmt>6176</cmt>
-    <desc>6176</desc>
-  </wpt>
-  <wpt lat="42.448500000" lon="-71.106166667">
-    <name>6177</name>
-    <cmt>6177</cmt>
-    <desc>6177</desc>
-  </wpt>
-  <wpt lat="42.453333333" lon="-71.106833333">
-    <name>6272</name>
-    <cmt>6272</cmt>
-    <desc>6272</desc>
-  </wpt>
-  <wpt lat="42.453500000" lon="-71.107333333">
-    <name>6272.1</name>
-    <cmt>6272.1</cmt>
-    <desc>6272.1</desc>
-  </wpt>
-  <wpt lat="42.458333333" lon="-71.106833333">
-    <name>6278</name>
-    <cmt>6278</cmt>
-    <desc>6278</desc>
-  </wpt>
-  <wpt lat="42.451500000" lon="-71.105333333">
-    <name>6280</name>
-    <cmt>6280</cmt>
-    <desc>6280</desc>
-  </wpt>
-  <wpt lat="42.453833333" lon="-71.105166667">
-    <name>6283</name>
-    <cmt>6283</cmt>
-    <desc>6283</desc>
-  </wpt>
-  <wpt lat="42.460000000" lon="-71.106166667">
-    <name>6289</name>
-    <cmt>6289</cmt>
-    <desc>6289</desc>
-  </wpt>
-  <wpt lat="42.457666667" lon="-71.105166667">
-    <name>6297</name>
-    <cmt>6297</cmt>
-    <desc>6297</desc>
-  </wpt>
-  <wpt lat="42.467166667" lon="-71.113500000">
-    <name>6328</name>
-    <cmt>6328</cmt>
-    <desc>6328</desc>
-  </wpt>
-  <wpt lat="42.464166667" lon="-71.109833333">
-    <name>6354</name>
-    <cmt>6354</cmt>
-    <desc>6354</desc>
-  </wpt>
-  <wpt lat="42.466500000" lon="-71.110000000">
-    <name>635722</name>
-    <cmt>635722</cmt>
-    <desc>635722</desc>
-  </wpt>
-  <wpt lat="42.466500000" lon="-71.109333333">
-    <name>635783</name>
-    <cmt>635783</cmt>
-    <desc>635783</desc>
-  </wpt>
-  <wpt lat="42.463500000" lon="-71.107166667">
-    <name>6373</name>
-    <cmt>6373</cmt>
-    <desc>6373</desc>
-  </wpt>
-  <wpt lat="42.401000000" lon="-71.110166667">
-    <name>6634</name>
-    <cmt>6634</cmt>
-    <desc>6634</desc>
-  </wpt>
-  <wpt lat="42.432666667" lon="-71.106500000">
-    <name>6979</name>
-    <cmt>6979</cmt>
-    <desc>6979</desc>
-  </wpt>
-  <wpt lat="42.431000000" lon="-71.107833333">
-    <name>6997</name>
-    <cmt>6997</cmt>
-    <desc>6997</desc>
-  </wpt>
-  <wpt lat="42.465666667" lon="-71.107333333">
-    <name>BEARHILL</name>
-    <cmt>BEARHILL</cmt>
-    <desc>BEARHILL</desc>
-  </wpt>
-  <wpt lat="42.431000000" lon="-71.107666667">
-    <name>BELLEVUE</name>
-    <cmt>BELLEVUE</cmt>
-    <desc>BELLEVUE</desc>
-  </wpt>
-  <wpt lat="42.438666667" lon="-71.114000000">
-    <name>6016</name>
-    <cmt>6016</cmt>
-    <desc>6016</desc>
-  </wpt>
-  <wpt lat="42.456500000" lon="-71.124666667">
-    <name>5236BRIDG</name>
-    <cmt>5236BRIDG</cmt>
-    <desc>5236BRIDG</desc>
-  </wpt>
-  <wpt lat="42.465833333" lon="-71.119833333">
-    <name>5376BRIDG</name>
-    <cmt>5376BRIDG</cmt>
-    <desc>5376BRIDG</desc>
-  </wpt>
-  <wpt lat="42.443000000" lon="-71.105833333">
-    <name>6181CROSS</name>
-    <cmt>6181CROSS</cmt>
-    <desc>6181CROSS</desc>
-  </wpt>
-  <wpt lat="42.435500000" lon="-71.109666667">
-    <name>6042CROSS</name>
-    <cmt>6042CROSS</cmt>
-    <desc>6042CROSS</desc>
-  </wpt>
-  <wpt lat="42.458500000" lon="-71.103666667">
-    <name>DARKHOLLP</name>
-    <cmt>DARKHOLLP</cmt>
-    <desc>DARKHOLLP</desc>
-  </wpt>
-  <wpt lat="42.443166667" lon="-71.112666667">
-    <name>6121DEAD</name>
-    <cmt>6121DEAD</cmt>
-    <desc>6121DEAD</desc>
-  </wpt>
-  <wpt lat="42.449833333" lon="-71.119333333">
-    <name>5179DEAD</name>
-    <cmt>5179DEAD</cmt>
-    <desc>5179DEAD</desc>
-  </wpt>
-  <wpt lat="42.459666667" lon="-71.116500000">
-    <name>5299DEAD</name>
-    <cmt>5299DEAD</cmt>
-    <desc>5299DEAD</desc>
-  </wpt>
-  <wpt lat="42.465500000" lon="-71.119166667">
-    <name>5376DEAD</name>
-    <cmt>5376DEAD</cmt>
-    <desc>5376DEAD</desc>
-  </wpt>
-  <wpt lat="42.462833333" lon="-71.110000000">
-    <name>6353DEAD</name>
-    <cmt>6353DEAD</cmt>
-    <desc>6353DEAD</desc>
-  </wpt>
-  <wpt lat="42.446833333" lon="-71.108833333">
-    <name>6155DEAD</name>
-    <cmt>6155DEAD</cmt>
-    <desc>6155DEAD</desc>
-  </wpt>
-  <wpt lat="42.451166667" lon="-71.126666667">
-    <name>GATE14</name>
-    <cmt>GATE14</cmt>
-    <desc>GATE14</desc>
-  </wpt>
-  <wpt lat="42.458500000" lon="-71.122000000">
-    <name>GATE16</name>
-    <cmt>GATE16</cmt>
-    <desc>GATE16</desc>
-  </wpt>
-  <wpt lat="42.459333333" lon="-71.119166667">
-    <name>GATE17</name>
-    <cmt>GATE17</cmt>
-    <desc>GATE17</desc>
-  </wpt>
-  <wpt lat="42.466333333" lon="-71.119166667">
-    <name>GATE19</name>
-    <cmt>GATE19</cmt>
-    <desc>GATE19</desc>
-  </wpt>
-  <wpt lat="42.468666667" lon="-71.107666667">
-    <name>GATE21</name>
-    <cmt>GATE21</cmt>
-    <desc>GATE21</desc>
-  </wpt>
-  <wpt lat="42.456666667" lon="-71.103000000">
-    <name>GATE24</name>
-    <cmt>GATE24</cmt>
-    <desc>GATE24</desc>
-  </wpt>
-  <wpt lat="42.430833333" lon="-71.107666667">
-    <name>GATE5</name>
-    <cmt>GATE5</cmt>
-    <desc>GATE5</desc>
-  </wpt>
-  <wpt lat="42.431166667" lon="-71.109166667">
-    <name>GATE6</name>
-    <cmt>GATE6</cmt>
-    <desc>GATE6</desc>
-  </wpt>
-  <wpt lat="42.439500000" lon="-71.106500000">
-    <name>6077LOGS</name>
-    <cmt>6077LOGS</cmt>
-    <desc>6077LOGS</desc>
-  </wpt>
-  <wpt lat="42.449833333" lon="-71.122333333">
-    <name>5148NANEP</name>
-    <cmt>5148NANEP</cmt>
-    <desc>5148NANEP</desc>
-  </wpt>
-  <wpt lat="42.457333333" lon="-71.119833333">
-    <name>5267OBSTC</name>
-    <cmt>5267OBSTC</cmt>
-    <desc>5267OBSTC</desc>
-  </wpt>
-  <wpt lat="42.435000000" lon="-71.110000000">
-    <name>PANTHRCAV</name>
-    <cmt>PANTHRCAV</cmt>
-    <desc>PANTHRCAV</desc>
-  </wpt>
-  <wpt lat="42.453333333" lon="-71.121166667">
-    <name>5252PURPL</name>
-    <cmt>5252PURPL</cmt>
-    <desc>5252PURPL</desc>
-  </wpt>
-  <wpt lat="42.457666667" lon="-71.117500000">
-    <name>5287WATER</name>
-    <cmt>5287WATER</cmt>
-    <desc>5287WATER</desc>
-  </wpt>
-  <wpt lat="42.459333333" lon="-71.124500000">
-    <name>5239ROAD</name>
-    <cmt>5239ROAD</cmt>
-    <desc>5239ROAD</desc>
-  </wpt>
-  <wpt lat="42.458833333" lon="-71.119000000">
-    <name>5278ROAD</name>
-    <cmt>5278ROAD</cmt>
-    <desc>5278ROAD</desc>
-  </wpt>
-  <wpt lat="42.440000000" lon="-71.121000000">
-    <name>5058ROAD</name>
-    <cmt>5058ROAD</cmt>
-    <desc>5058ROAD</desc>
-  </wpt>
-  <wpt lat="42.453333333" lon="-71.106833333">
-    <name>SHEEPFOLD</name>
-    <cmt>SHEEPFOLD</cmt>
-    <desc>SHEEPFOLD</desc>
-  </wpt>
-  <wpt lat="42.456000000" lon="-71.107500000">
-    <name>SOAPBOX</name>
-    <cmt>SOAPBOX</cmt>
-    <desc>SOAPBOX</desc>
-  </wpt>
-  <wpt lat="42.465833333" lon="-71.119333333">
-    <name>5376STREM</name>
-    <cmt>5376STREM</cmt>
-    <desc>5376STREM</desc>
-  </wpt>
-  <wpt lat="42.445333333" lon="-71.122833333">
-    <name>5144SUMMT</name>
-    <cmt>5144SUMMT</cmt>
-    <desc>5144SUMMT</desc>
-  </wpt>
-  <wpt lat="42.441666667" lon="-71.121666667">
-    <name>5150TANK</name>
-    <cmt>5150TANK</cmt>
-    <desc>5150TANK</desc>
-  </wpt>
-  <rte>
-    <number>1</number>
-    <rtept lat="42.431000000" lon="-71.107666667">
-      <name>BELLEVUE</name>
-    </rtept>
-    <rtept lat="42.431166667" lon="-71.109166667">
-      <name>GATE6</name>
-    </rtept>
-    <rtept lat="42.435000000" lon="-71.110000000">
-      <name>PANTHRCAV</name>
-    </rtept>
-    <rtept lat="42.436833333" lon="-71.113166667">
-      <name>6014MEADW</name>
-    </rtept>
-    <rtept lat="42.439000000" lon="-71.114500000">
-      <name>6006</name>
-    </rtept>
-    <rtept lat="42.438666667" lon="-71.114833333">
-      <name>6006BLUE</name>
-    </rtept>
-    <rtept lat="42.439000000" lon="-71.116166667">
-      <name>5096</name>
-    </rtept>
-    <rtept lat="42.438833333" lon="-71.119333333">
-      <name>5066</name>
-    </rtept>
-    <rtept lat="42.439166667" lon="-71.119666667">
-      <name>5067</name>
-    </rtept>
-    <rtept lat="42.440000000" lon="-71.121000000">
-      <name>5058ROAD</name>
-    </rtept>
-    <rtept lat="42.441666667" lon="-71.121666667">
-      <name>5150TANK</name>
-    </rtept>
-    <rtept lat="42.443833333" lon="-71.122000000">
-      <name>5142</name>
-    </rtept>
-    <rtept lat="42.445333333" lon="-71.122833333">
-      <name>5144SUMMT</name>
-    </rtept>
-    <rtept lat="42.447333333" lon="-71.121500000">
-      <name>5156</name>
-    </rtept>
-    <rtept lat="42.449833333" lon="-71.122333333">
-      <name>5148NANEP</name>
-    </rtept>
-    <rtept lat="42.451500000" lon="-71.121666667">
-      <name>5258</name>
-    </rtept>
-    <rtept lat="42.453333333" lon="-71.121166667">
-      <name>5252PURPL</name>
-    </rtept>
-    <rtept lat="42.456333333" lon="-71.119333333">
-      <name>527631</name>
-    </rtept>
-    <rtept lat="42.456666667" lon="-71.119666667">
-      <name>527614</name>
-    </rtept>
-    <rtept lat="42.457333333" lon="-71.119833333">
-      <name>5267OBSTC</name>
-    </rtept>
-    <rtept lat="42.458166667" lon="-71.119166667">
-      <name>5278</name>
-    </rtept>
-    <rtept lat="42.459333333" lon="-71.117666667">
-      <name>5289</name>
-    </rtept>
-    <rtept lat="42.464166667" lon="-71.119833333">
-      <name>5374FIRE</name>
-    </rtept>
-    <rtept lat="42.465666667" lon="-71.119333333">
-      <name>5376</name>
-    </rtept>
-    <rtept lat="42.465833333" lon="-71.119333333">
-      <name>5376STREM</name>
-    </rtept>
-    <rtept lat="42.467166667" lon="-71.113500000">
-      <name>6328</name>
-    </rtept>
-    <rtept lat="42.466500000" lon="-71.110000000">
-      <name>635722</name>
-    </rtept>
-    <rtept lat="42.466500000" lon="-71.109333333">
-      <name>635783</name>
-    </rtept>
-    <rtept lat="42.463500000" lon="-71.107166667">
-      <name>6373</name>
-    </rtept>
-    <rtept lat="42.465666667" lon="-71.107333333">
-      <name>BEARHILL</name>
-    </rtept>
-    <rtept lat="42.460000000" lon="-71.106166667">
-      <name>6289</name>
-    </rtept>
-    <rtept lat="42.457666667" lon="-71.105166667">
-      <name>6297</name>
-    </rtept>
-    <rtept lat="42.453833333" lon="-71.105166667">
-      <name>6283</name>
-    </rtept>
-    <rtept lat="42.451500000" lon="-71.105333333">
-      <name>6280</name>
-    </rtept>
-    <rtept lat="42.448500000" lon="-71.106166667">
-      <name>6177</name>
-    </rtept>
-    <rtept lat="42.447833333" lon="-71.106666667">
-      <name>6176</name>
-    </rtept>
-    <rtept lat="42.444833333" lon="-71.108833333">
-      <name>6153</name>
-    </rtept>
-    <rtept lat="42.443666667" lon="-71.106333333">
-      <name>6171</name>
-    </rtept>
-    <rtept lat="42.443000000" lon="-71.111500000">
-      <name>6131</name>
-    </rtept>
-    <rtept lat="42.442166667" lon="-71.111000000">
-      <name>6130</name>
-    </rtept>
-    <rtept lat="42.441833333" lon="-71.113166667">
-      <name>6029</name>
-    </rtept>
-    <rtept lat="42.439000000" lon="-71.114500000">
-      <name>6006</name>
-    </rtept>
-    <rtept lat="42.436833333" lon="-71.113166667">
-      <name>6014MEADW</name>
-    </rtept>
-    <rtept lat="42.435000000" lon="-71.110000000">
-      <name>PANTHRCAV</name>
-    </rtept>
-    <rtept lat="42.431166667" lon="-71.109166667">
-      <name>GATE6</name>
-    </rtept>
-    <rtept lat="42.431000000" lon="-71.107666667">
-      <name>BELLEVUE</name>
-    </rtept>
-  </rte>
-  <trk>
-    <trkseg>
-      <trkpt lat="30.062166667" lon="-91.610333333">
-        <ele>0.914</ele>
-        <time>2002-05-25T17:06:21Z</time>
-        <speed>0.000000</speed>
-      </trkpt>
-      <trkpt lat="30.062833333" lon="-91.610500000">
-        <ele>0.000</ele>
-        <time>2002-05-25T17:09:55Z</time>
-        <speed>0.329244</speed>
-      </trkpt>
-      <trkpt lat="30.062666667" lon="-91.608333333">
-        <ele>0.000</ele>
-        <time>2002-05-25T17:12:00Z</time>
-        <speed>1.774833</speed>
-      </trkpt>
-      <trkpt lat="30.062333333" lon="-91.607333333">
-        <ele>0.000</ele>
-        <time>2002-05-25T17:12:48Z</time>
-        <speed>1.970322</speed>
-      </trkpt>
-      <trkpt lat="30.061500000" lon="-91.605333333">
-        <ele>0.000</ele>
-        <time>2002-05-25T17:14:41Z</time>
-        <speed>1.954889</speed>
-      </trkpt>
-      <trkpt lat="30.059833333" lon="-91.599333333">
-        <ele>0.000</ele>
-        <time>2002-05-25T17:17:16Z</time>
-        <speed>3.868622</speed>
-      </trkpt>
-      <trkpt lat="30.057833333" lon="-91.596666667">
-        <ele>0.000</ele>
-        <time>2002-05-25T17:17:46Z</time>
-        <speed>11.415523</speed>
-      </trkpt>
-      <trkpt lat="30.055333333" lon="-91.594833333">
-        <ele>0.000</ele>
-        <time>2002-05-25T17:18:20Z</time>
-        <speed>9.388611</speed>
-      </trkpt>
-      <trkpt lat="30.053833333" lon="-91.592666667">
-        <ele>0.000</ele>
-        <time>2002-05-25T17:19:01Z</time>
-        <speed>6.734078</speed>
-      </trkpt>
-      <trkpt lat="30.049666667" lon="-91.589833333">
-        <ele>0.000</ele>
-        <time>2002-05-25T17:20:46Z</time>
-        <speed>5.123867</speed>
-      </trkpt>
-      <trkpt lat="30.049000000" lon="-91.589833333">
-        <ele>0.000</ele>
-        <time>2002-05-25T17:21:10Z</time>
-        <speed>3.364467</speed>
-      </trkpt>
-      <trkpt lat="30.048833333" lon="-91.593000000">
-        <ele>0.000</ele>
-        <time>2002-05-25T17:21:51Z</time>
-        <speed>7.191933</speed>
-      </trkpt>
-      <trkpt lat="30.046166667" lon="-91.596500000">
-        <ele>0.000</ele>
-        <time>2002-05-25T17:22:35Z</time>
-        <speed>10.072823</speed>
-      </trkpt>
-      <trkpt lat="30.045500000" lon="-91.598666667">
-        <ele>0.000</ele>
-        <time>2002-05-25T17:23:08Z</time>
-        <speed>7.047889</speed>
-      </trkpt>
-      <trkpt lat="30.047333333" lon="-91.600333333">
-        <ele>0.000</ele>
-        <time>2002-05-25T18:04:23Z</time>
-        <speed>0.102889</speed>
-      </trkpt>
-      <trkpt lat="30.047000000" lon="-91.599666667">
-        <ele>2.134</ele>
-        <time>2002-05-25T18:06:04Z</time>
-        <speed>0.689356</speed>
-      </trkpt>
-      <trkpt lat="30.046500000" lon="-91.599500000">
-        <ele>0.000</ele>
-        <time>2002-05-25T18:07:06Z</time>
-        <speed>1.049467</speed>
-      </trkpt>
-      <trkpt lat="30.046166667" lon="-91.599000000">
-        <ele>0.914</ele>
-        <time>2002-05-25T18:08:18Z</time>
-        <speed>0.781956</speed>
-      </trkpt>
-      <trkpt lat="30.046333333" lon="-91.597666667">
-        <ele>0.000</ele>
-        <time>2002-05-25T18:10:20Z</time>
-        <speed>0.972300</speed>
-      </trkpt>
-      <trkpt lat="30.046333333" lon="-91.597166667">
-        <ele>0.000</ele>
-        <time>2002-05-25T18:11:09Z</time>
-        <speed>1.111200</speed>
-      </trkpt>
-      <trkpt lat="30.046833333" lon="-91.596333333">
-        <ele>0.000</ele>
-        <time>2002-05-25T18:12:18Z</time>
-        <speed>1.358133</speed>
-      </trkpt>
-      <trkpt lat="30.047500000" lon="-91.595166667">
-        <ele>0.000</ele>
-        <time>2002-05-25T18:14:22Z</time>
-        <speed>1.064900</speed>
-      </trkpt>
-      <trkpt lat="30.047833333" lon="-91.594833333">
-        <ele>2.134</ele>
-        <time>2002-05-25T18:15:04Z</time>
-        <speed>1.358133</speed>
-      </trkpt>
-      <trkpt lat="30.048166667" lon="-91.594000000">
-        <ele>0.914</ele>
-        <time>2002-05-25T18:16:14Z</time>
-        <speed>1.183222</speed>
-      </trkpt>
-      <trkpt lat="30.048666667" lon="-91.593833333">
-        <ele>0.914</ele>
-        <time>2002-05-25T18:17:01Z</time>
-        <speed>1.178078</speed>
-      </trkpt>
-      <trkpt lat="30.049333333" lon="-91.593833333">
-        <ele>0.000</ele>
-        <time>2002-05-25T18:18:07Z</time>
-        <speed>1.126633</speed>
-      </trkpt>
-      <trkpt lat="30.050333333" lon="-91.594000000">
-        <ele>2.134</ele>
-        <time>2002-05-25T18:19:51Z</time>
-        <speed>1.044322</speed>
-      </trkpt>
-      <trkpt lat="30.050833333" lon="-91.594166667">
-        <ele>0.000</ele>
-        <time>2002-05-25T18:20:39Z</time>
-        <speed>1.111200</speed>
-      </trkpt>
-      <trkpt lat="30.051166667" lon="-91.594333333">
-        <ele>0.000</ele>
-        <time>2002-05-25T18:21:24Z</time>
-        <speed>1.234667</speed>
-      </trkpt>
-      <trkpt lat="30.051833333" lon="-91.594333333">
-        <ele>0.000</ele>
-        <time>2002-05-25T18:22:17Z</time>
-        <speed>1.188367</speed>
-      </trkpt>
-      <trkpt lat="30.052166667" lon="-91.594666667">
-        <ele>0.000</ele>
-        <time>2002-05-25T18:23:18Z</time>
-        <speed>0.895133</speed>
-      </trkpt>
-      <trkpt lat="30.053000000" lon="-91.594666667">
-        <ele>0.000</ele>
-        <time>2002-05-25T18:24:37Z</time>
-        <speed>1.126633</speed>
-      </trkpt>
-      <trkpt lat="30.054833333" lon="-91.595166667">
-        <ele>6.096</ele>
-        <time>2002-05-25T18:28:13Z</time>
-        <speed>0.982589</speed>
-      </trkpt>
-      <trkpt lat="30.053666667" lon="-91.595000000">
-        <ele>2.134</ele>
-        <time>2002-05-25T18:31:36Z</time>
-        <speed>0.632767</speed>
-      </trkpt>
-      <trkpt lat="30.053166667" lon="-91.594833333">
-        <ele>0.000</ele>
-        <time>2002-05-25T18:32:56Z</time>
-        <speed>0.787100</speed>
-      </trkpt>
-      <trkpt lat="30.052666667" lon="-91.594833333">
-        <ele>0.000</ele>
-        <time>2002-05-25T18:34:02Z</time>
-        <speed>0.931144</speed>
-      </trkpt>
-      <trkpt lat="30.052500000" lon="-91.595500000">
-        <ele>0.000</ele>
-        <time>2002-05-25T18:36:03Z</time>
-        <speed>0.504156</speed>
-      </trkpt>
-      <trkpt lat="30.052500000" lon="-91.596000000">
-        <ele>0.000</ele>
-        <time>2002-05-25T18:36:48Z</time>
-        <speed>1.147211</speed>
-      </trkpt>
-      <trkpt lat="30.052666667" lon="-91.596833333">
-        <ele>0.914</ele>
-        <time>2002-05-25T18:37:52Z</time>
-        <speed>1.260389</speed>
-      </trkpt>
-      <trkpt lat="30.053166667" lon="-91.597833333">
-        <ele>0.000</ele>
-        <time>2002-05-25T18:39:18Z</time>
-        <speed>1.347844</speed>
-      </trkpt>
-      <trkpt lat="30.053666667" lon="-91.598000000">
-        <ele>0.000</ele>
-        <time>2002-05-25T18:40:15Z</time>
-        <speed>0.967156</speed>
-      </trkpt>
-      <trkpt lat="30.054000000" lon="-91.597833333">
-        <ele>6.096</ele>
-        <time>2002-05-25T18:41:25Z</time>
-        <speed>0.622478</speed>
-      </trkpt>
-      <trkpt lat="30.053666667" lon="-91.598000000">
-        <ele>0.000</ele>
-        <time>2002-05-25T18:42:37Z</time>
-        <speed>0.684211</speed>
-      </trkpt>
-      <trkpt lat="30.053166667" lon="-91.598000000">
-        <ele>0.000</ele>
-        <time>2002-05-25T18:44:01Z</time>
-        <speed>0.586467</speed>
-      </trkpt>
-      <trkpt lat="30.052833333" lon="-91.597500000">
-        <ele>0.000</ele>
-        <time>2002-05-25T18:45:53Z</time>
-        <speed>0.514444</speed>
-      </trkpt>
-      <trkpt lat="30.052500000" lon="-91.597000000">
-        <ele>0.000</ele>
-        <time>2002-05-25T18:46:54Z</time>
-        <speed>1.028889</speed>
-      </trkpt>
-      <trkpt lat="30.052333333" lon="-91.596500000">
-        <ele>0.000</ele>
-        <time>2002-05-25T18:47:42Z</time>
-        <speed>1.142067</speed>
-      </trkpt>
-      <trkpt lat="30.052333333" lon="-91.595666667">
-        <ele>0.000</ele>
-        <time>2002-05-25T18:48:41Z</time>
-        <speed>1.234667</speed>
-      </trkpt>
-      <trkpt lat="30.052166667" lon="-91.595000000">
-        <ele>0.000</ele>
-        <time>2002-05-25T18:49:52Z</time>
-        <speed>0.905422</speed>
-      </trkpt>
-      <trkpt lat="30.051833333" lon="-91.594666667">
-        <ele>0.000</ele>
-        <time>2002-05-25T18:50:49Z</time>
-        <speed>0.843689</speed>
-      </trkpt>
-      <trkpt lat="30.051000000" lon="-91.594333333">
-        <ele>0.000</ele>
-        <time>2002-05-25T18:52:14Z</time>
-        <speed>1.142067</speed>
-      </trkpt>
-      <trkpt lat="30.050500000" lon="-91.594166667">
-        <ele>0.000</ele>
-        <time>2002-05-25T18:52:56Z</time>
-        <speed>1.337556</speed>
-      </trkpt>
-      <trkpt lat="30.050166667" lon="-91.594166667">
-        <ele>0.000</ele>
-        <time>2002-05-25T18:53:38Z</time>
-        <speed>1.064900</speed>
-      </trkpt>
-      <trkpt lat="30.049166667" lon="-91.593666667">
-        <ele>0.000</ele>
-        <time>2002-05-25T18:55:11Z</time>
-        <speed>1.358133</speed>
-      </trkpt>
-      <trkpt lat="30.048500000" lon="-91.594333333">
-        <ele>0.000</ele>
-        <time>2002-05-25T18:56:32Z</time>
-        <speed>1.095767</speed>
-      </trkpt>
-      <trkpt lat="30.048000000" lon="-91.594666667">
-        <ele>0.000</ele>
-        <time>2002-05-25T18:57:24Z</time>
-        <speed>1.214089</speed>
-      </trkpt>
-      <trkpt lat="30.047500000" lon="-91.595500000">
-        <ele>7.010</ele>
-        <time>2002-05-25T18:58:40Z</time>
-        <speed>1.229522</speed>
-      </trkpt>
-      <trkpt lat="30.047000000" lon="-91.596000000">
-        <ele>0.000</ele>
-        <time>2002-05-25T18:59:28Z</time>
-        <speed>1.491889</speed>
-      </trkpt>
-      <trkpt lat="30.046666667" lon="-91.596666667">
-        <ele>0.000</ele>
-        <time>2002-05-25T19:00:22Z</time>
-        <speed>1.394144</speed>
-      </trkpt>
-      <trkpt lat="30.046333333" lon="-91.597666667">
-        <ele>0.000</ele>
-        <time>2002-05-25T19:01:41Z</time>
-        <speed>1.322122</speed>
-      </trkpt>
-      <trkpt lat="30.046166667" lon="-91.598500000">
-        <ele>0.000</ele>
-        <time>2002-05-25T19:02:48Z</time>
-        <speed>1.208944</speed>
-      </trkpt>
-      <trkpt lat="30.046333333" lon="-91.599000000">
-        <ele>0.000</ele>
-        <time>2002-05-25T19:03:43Z</time>
-        <speed>0.889989</speed>
-      </trkpt>
-      <trkpt lat="30.046833333" lon="-91.599333333">
-        <ele>0.000</ele>
-        <time>2002-05-25T19:04:49Z</time>
-        <speed>0.910567</speed>
-      </trkpt>
-      <trkpt lat="30.047166667" lon="-91.599666667">
-        <ele>0.000</ele>
-        <time>2002-05-25T19:05:57Z</time>
-        <speed>0.792244</speed>
-      </trkpt>
-    </trkseg>
-  </trk>
-</gpx>
diff --git a/reference/skyforce_wpt.gpx b/reference/skyforce_wpt.gpx
deleted file mode 100644 (file)
index a52b0f4..0000000
+++ /dev/null
@@ -1,435 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<gpx version="1.0" creator="GPSBabel - https://www.gpsbabel.org" xmlns="http://www.topografix.com/GPX/1/0">
-  <time>1970-01-01T00:00:00Z</time>
-  <bounds minlat="42.401000000" minlon="-71.126666667" maxlat="42.468666667" maxlon="-71.103000000"/>
-  <wpt lat="42.438833333" lon="-71.119333333">
-    <name>5066</name>
-    <cmt>5066</cmt>
-    <desc>5066</desc>
-  </wpt>
-  <wpt lat="42.439166667" lon="-71.119666667">
-    <name>5067</name>
-    <cmt>5067</cmt>
-    <desc>5067</desc>
-  </wpt>
-  <wpt lat="42.439000000" lon="-71.116166667">
-    <name>5096</name>
-    <cmt>5096</cmt>
-    <desc>5096</desc>
-  </wpt>
-  <wpt lat="42.443833333" lon="-71.122000000">
-    <name>5142</name>
-    <cmt>5142</cmt>
-    <desc>5142</desc>
-  </wpt>
-  <wpt lat="42.447333333" lon="-71.121500000">
-    <name>5156</name>
-    <cmt>5156</cmt>
-    <desc>5156</desc>
-  </wpt>
-  <wpt lat="42.454833333" lon="-71.125166667">
-    <name>5224</name>
-    <cmt>5224</cmt>
-    <desc>5224</desc>
-  </wpt>
-  <wpt lat="42.459000000" lon="-71.125000000">
-    <name>5229</name>
-    <cmt>5229</cmt>
-    <desc>5229</desc>
-  </wpt>
-  <wpt lat="42.457000000" lon="-71.124500000">
-    <name>5237</name>
-    <cmt>5237</cmt>
-    <desc>5237</desc>
-  </wpt>
-  <wpt lat="42.454333333" lon="-71.121000000">
-    <name>5254</name>
-    <cmt>5254</cmt>
-    <desc>5254</desc>
-  </wpt>
-  <wpt lat="42.451500000" lon="-71.121666667">
-    <name>5258</name>
-    <cmt>5258</cmt>
-    <desc>5258</desc>
-  </wpt>
-  <wpt lat="42.454333333" lon="-71.120666667">
-    <name>5264</name>
-    <cmt>5264</cmt>
-    <desc>5264</desc>
-  </wpt>
-  <wpt lat="42.457833333" lon="-71.121000000">
-    <name>526708</name>
-    <cmt>526708</cmt>
-    <desc>526708</desc>
-  </wpt>
-  <wpt lat="42.457166667" lon="-71.120333333">
-    <name>526750</name>
-    <cmt>526750</cmt>
-    <desc>526750</desc>
-  </wpt>
-  <wpt lat="42.456666667" lon="-71.119666667">
-    <name>527614</name>
-    <cmt>527614</cmt>
-    <desc>527614</desc>
-  </wpt>
-  <wpt lat="42.456333333" lon="-71.119333333">
-    <name>527631</name>
-    <cmt>527631</cmt>
-    <desc>527631</desc>
-  </wpt>
-  <wpt lat="42.458166667" lon="-71.119166667">
-    <name>5278</name>
-    <cmt>5278</cmt>
-    <desc>5278</desc>
-  </wpt>
-  <wpt lat="42.459333333" lon="-71.117666667">
-    <name>5289</name>
-    <cmt>5289</cmt>
-    <desc>5289</desc>
-  </wpt>
-  <wpt lat="42.464166667" lon="-71.119833333">
-    <name>5374FIRE</name>
-    <cmt>5374FIRE</cmt>
-    <desc>5374FIRE</desc>
-  </wpt>
-  <wpt lat="42.465666667" lon="-71.119333333">
-    <name>5376</name>
-    <cmt>5376</cmt>
-    <desc>5376</desc>
-  </wpt>
-  <wpt lat="42.439000000" lon="-71.114500000">
-    <name>6006</name>
-    <cmt>6006</cmt>
-    <desc>6006</desc>
-  </wpt>
-  <wpt lat="42.438666667" lon="-71.114833333">
-    <name>6006BLUE</name>
-    <cmt>6006BLUE</cmt>
-    <desc>6006BLUE</desc>
-  </wpt>
-  <wpt lat="42.436833333" lon="-71.113166667">
-    <name>6014MEADW</name>
-    <cmt>6014MEADW</cmt>
-    <desc>6014MEADW</desc>
-  </wpt>
-  <wpt lat="42.441833333" lon="-71.113166667">
-    <name>6029</name>
-    <cmt>6029</cmt>
-    <desc>6029</desc>
-  </wpt>
-  <wpt lat="42.436166667" lon="-71.109000000">
-    <name>6053</name>
-    <cmt>6053</cmt>
-    <desc>6053</desc>
-  </wpt>
-  <wpt lat="42.439333333" lon="-71.107500000">
-    <name>6066</name>
-    <cmt>6066</cmt>
-    <desc>6066</desc>
-  </wpt>
-  <wpt lat="42.439833333" lon="-71.107500000">
-    <name>6067</name>
-    <cmt>6067</cmt>
-    <desc>6067</desc>
-  </wpt>
-  <wpt lat="42.434833333" lon="-71.105833333">
-    <name>6071</name>
-    <cmt>6071</cmt>
-    <desc>6071</desc>
-  </wpt>
-  <wpt lat="42.433333333" lon="-71.106666667">
-    <name>6073</name>
-    <cmt>6073</cmt>
-    <desc>6073</desc>
-  </wpt>
-  <wpt lat="42.437333333" lon="-71.104833333">
-    <name>6084</name>
-    <cmt>6084</cmt>
-    <desc>6084</desc>
-  </wpt>
-  <wpt lat="42.442166667" lon="-71.111000000">
-    <name>6130</name>
-    <cmt>6130</cmt>
-    <desc>6130</desc>
-  </wpt>
-  <wpt lat="42.443000000" lon="-71.111500000">
-    <name>6131</name>
-    <cmt>6131</cmt>
-    <desc>6131</desc>
-  </wpt>
-  <wpt lat="42.444833333" lon="-71.108833333">
-    <name>6153</name>
-    <cmt>6153</cmt>
-    <desc>6153</desc>
-  </wpt>
-  <wpt lat="42.443666667" lon="-71.106333333">
-    <name>6171</name>
-    <cmt>6171</cmt>
-    <desc>6171</desc>
-  </wpt>
-  <wpt lat="42.447833333" lon="-71.106666667">
-    <name>6176</name>
-    <cmt>6176</cmt>
-    <desc>6176</desc>
-  </wpt>
-  <wpt lat="42.448500000" lon="-71.106166667">
-    <name>6177</name>
-    <cmt>6177</cmt>
-    <desc>6177</desc>
-  </wpt>
-  <wpt lat="42.453333333" lon="-71.106833333">
-    <name>6272</name>
-    <cmt>6272</cmt>
-    <desc>6272</desc>
-  </wpt>
-  <wpt lat="42.453500000" lon="-71.107333333">
-    <name>6272.1</name>
-    <cmt>6272.1</cmt>
-    <desc>6272.1</desc>
-  </wpt>
-  <wpt lat="42.458333333" lon="-71.106833333">
-    <name>6278</name>
-    <cmt>6278</cmt>
-    <desc>6278</desc>
-  </wpt>
-  <wpt lat="42.451500000" lon="-71.105333333">
-    <name>6280</name>
-    <cmt>6280</cmt>
-    <desc>6280</desc>
-  </wpt>
-  <wpt lat="42.453833333" lon="-71.105166667">
-    <name>6283</name>
-    <cmt>6283</cmt>
-    <desc>6283</desc>
-  </wpt>
-  <wpt lat="42.460000000" lon="-71.106166667">
-    <name>6289</name>
-    <cmt>6289</cmt>
-    <desc>6289</desc>
-  </wpt>
-  <wpt lat="42.457666667" lon="-71.105166667">
-    <name>6297</name>
-    <cmt>6297</cmt>
-    <desc>6297</desc>
-  </wpt>
-  <wpt lat="42.467166667" lon="-71.113500000">
-    <name>6328</name>
-    <cmt>6328</cmt>
-    <desc>6328</desc>
-  </wpt>
-  <wpt lat="42.464166667" lon="-71.109833333">
-    <name>6354</name>
-    <cmt>6354</cmt>
-    <desc>6354</desc>
-  </wpt>
-  <wpt lat="42.466500000" lon="-71.110000000">
-    <name>635722</name>
-    <cmt>635722</cmt>
-    <desc>635722</desc>
-  </wpt>
-  <wpt lat="42.466500000" lon="-71.109333333">
-    <name>635783</name>
-    <cmt>635783</cmt>
-    <desc>635783</desc>
-  </wpt>
-  <wpt lat="42.463500000" lon="-71.107166667">
-    <name>6373</name>
-    <cmt>6373</cmt>
-    <desc>6373</desc>
-  </wpt>
-  <wpt lat="42.401000000" lon="-71.110166667">
-    <name>6634</name>
-    <cmt>6634</cmt>
-    <desc>6634</desc>
-  </wpt>
-  <wpt lat="42.432666667" lon="-71.106500000">
-    <name>6979</name>
-    <cmt>6979</cmt>
-    <desc>6979</desc>
-  </wpt>
-  <wpt lat="42.431000000" lon="-71.107833333">
-    <name>6997</name>
-    <cmt>6997</cmt>
-    <desc>6997</desc>
-  </wpt>
-  <wpt lat="42.465666667" lon="-71.107333333">
-    <name>BEARHILL</name>
-    <cmt>BEARHILL</cmt>
-    <desc>BEARHILL</desc>
-  </wpt>
-  <wpt lat="42.431000000" lon="-71.107666667">
-    <name>BELLEVUE</name>
-    <cmt>BELLEVUE</cmt>
-    <desc>BELLEVUE</desc>
-  </wpt>
-  <wpt lat="42.438666667" lon="-71.114000000">
-    <name>6016</name>
-    <cmt>6016</cmt>
-    <desc>6016</desc>
-  </wpt>
-  <wpt lat="42.456500000" lon="-71.124666667">
-    <name>5236BRIDG</name>
-    <cmt>5236BRIDG</cmt>
-    <desc>5236BRIDG</desc>
-  </wpt>
-  <wpt lat="42.465833333" lon="-71.119833333">
-    <name>5376BRIDG</name>
-    <cmt>5376BRIDG</cmt>
-    <desc>5376BRIDG</desc>
-  </wpt>
-  <wpt lat="42.443000000" lon="-71.105833333">
-    <name>6181CROSS</name>
-    <cmt>6181CROSS</cmt>
-    <desc>6181CROSS</desc>
-  </wpt>
-  <wpt lat="42.435500000" lon="-71.109666667">
-    <name>6042CROSS</name>
-    <cmt>6042CROSS</cmt>
-    <desc>6042CROSS</desc>
-  </wpt>
-  <wpt lat="42.458500000" lon="-71.103666667">
-    <name>DARKHOLLP</name>
-    <cmt>DARKHOLLP</cmt>
-    <desc>DARKHOLLP</desc>
-  </wpt>
-  <wpt lat="42.443166667" lon="-71.112666667">
-    <name>6121DEAD</name>
-    <cmt>6121DEAD</cmt>
-    <desc>6121DEAD</desc>
-  </wpt>
-  <wpt lat="42.449833333" lon="-71.119333333">
-    <name>5179DEAD</name>
-    <cmt>5179DEAD</cmt>
-    <desc>5179DEAD</desc>
-  </wpt>
-  <wpt lat="42.459666667" lon="-71.116500000">
-    <name>5299DEAD</name>
-    <cmt>5299DEAD</cmt>
-    <desc>5299DEAD</desc>
-  </wpt>
-  <wpt lat="42.465500000" lon="-71.119166667">
-    <name>5376DEAD</name>
-    <cmt>5376DEAD</cmt>
-    <desc>5376DEAD</desc>
-  </wpt>
-  <wpt lat="42.462833333" lon="-71.110000000">
-    <name>6353DEAD</name>
-    <cmt>6353DEAD</cmt>
-    <desc>6353DEAD</desc>
-  </wpt>
-  <wpt lat="42.446833333" lon="-71.108833333">
-    <name>6155DEAD</name>
-    <cmt>6155DEAD</cmt>
-    <desc>6155DEAD</desc>
-  </wpt>
-  <wpt lat="42.451166667" lon="-71.126666667">
-    <name>GATE14</name>
-    <cmt>GATE14</cmt>
-    <desc>GATE14</desc>
-  </wpt>
-  <wpt lat="42.458500000" lon="-71.122000000">
-    <name>GATE16</name>
-    <cmt>GATE16</cmt>
-    <desc>GATE16</desc>
-  </wpt>
-  <wpt lat="42.459333333" lon="-71.119166667">
-    <name>GATE17</name>
-    <cmt>GATE17</cmt>
-    <desc>GATE17</desc>
-  </wpt>
-  <wpt lat="42.466333333" lon="-71.119166667">
-    <name>GATE19</name>
-    <cmt>GATE19</cmt>
-    <desc>GATE19</desc>
-  </wpt>
-  <wpt lat="42.468666667" lon="-71.107666667">
-    <name>GATE21</name>
-    <cmt>GATE21</cmt>
-    <desc>GATE21</desc>
-  </wpt>
-  <wpt lat="42.456666667" lon="-71.103000000">
-    <name>GATE24</name>
-    <cmt>GATE24</cmt>
-    <desc>GATE24</desc>
-  </wpt>
-  <wpt lat="42.430833333" lon="-71.107666667">
-    <name>GATE5</name>
-    <cmt>GATE5</cmt>
-    <desc>GATE5</desc>
-  </wpt>
-  <wpt lat="42.431166667" lon="-71.109166667">
-    <name>GATE6</name>
-    <cmt>GATE6</cmt>
-    <desc>GATE6</desc>
-  </wpt>
-  <wpt lat="42.439500000" lon="-71.106500000">
-    <name>6077LOGS</name>
-    <cmt>6077LOGS</cmt>
-    <desc>6077LOGS</desc>
-  </wpt>
-  <wpt lat="42.449833333" lon="-71.122333333">
-    <name>5148NANEP</name>
-    <cmt>5148NANEP</cmt>
-    <desc>5148NANEP</desc>
-  </wpt>
-  <wpt lat="42.457333333" lon="-71.119833333">
-    <name>5267OBSTC</name>
-    <cmt>5267OBSTC</cmt>
-    <desc>5267OBSTC</desc>
-  </wpt>
-  <wpt lat="42.435000000" lon="-71.110000000">
-    <name>PANTHRCAV</name>
-    <cmt>PANTHRCAV</cmt>
-    <desc>PANTHRCAV</desc>
-  </wpt>
-  <wpt lat="42.453333333" lon="-71.121166667">
-    <name>5252PURPL</name>
-    <cmt>5252PURPL</cmt>
-    <desc>5252PURPL</desc>
-  </wpt>
-  <wpt lat="42.457666667" lon="-71.117500000">
-    <name>5287WATER</name>
-    <cmt>5287WATER</cmt>
-    <desc>5287WATER</desc>
-  </wpt>
-  <wpt lat="42.459333333" lon="-71.124500000">
-    <name>5239ROAD</name>
-    <cmt>5239ROAD</cmt>
-    <desc>5239ROAD</desc>
-  </wpt>
-  <wpt lat="42.458833333" lon="-71.119000000">
-    <name>5278ROAD</name>
-    <cmt>5278ROAD</cmt>
-    <desc>5278ROAD</desc>
-  </wpt>
-  <wpt lat="42.440000000" lon="-71.121000000">
-    <name>5058ROAD</name>
-    <cmt>5058ROAD</cmt>
-    <desc>5058ROAD</desc>
-  </wpt>
-  <wpt lat="42.453333333" lon="-71.106833333">
-    <name>SHEEPFOLD</name>
-    <cmt>SHEEPFOLD</cmt>
-    <desc>SHEEPFOLD</desc>
-  </wpt>
-  <wpt lat="42.456000000" lon="-71.107500000">
-    <name>SOAPBOX</name>
-    <cmt>SOAPBOX</cmt>
-    <desc>SOAPBOX</desc>
-  </wpt>
-  <wpt lat="42.465833333" lon="-71.119333333">
-    <name>5376STREM</name>
-    <cmt>5376STREM</cmt>
-    <desc>5376STREM</desc>
-  </wpt>
-  <wpt lat="42.445333333" lon="-71.122833333">
-    <name>5144SUMMT</name>
-    <cmt>5144SUMMT</cmt>
-    <desc>5144SUMMT</desc>
-  </wpt>
-  <wpt lat="42.441666667" lon="-71.121666667">
-    <name>5150TANK</name>
-    <cmt>5150TANK</cmt>
-    <desc>5150TANK</desc>
-  </wpt>
-</gpx>
diff --git a/reference/skyforce_wpt.txt b/reference/skyforce_wpt.txt
deleted file mode 100644 (file)
index d4f8e90..0000000
+++ /dev/null
@@ -1,86 +0,0 @@
-W     001 5066      N4226.33 W07107.16
-W     002 5067      N4226.35 W07107.18
-W     003 5096      N4226.34 W07106.97
-W     004 5142      N4226.63 W07107.32
-W     005 5156      N4226.84 W07107.29
-W     006 5224      N4227.29 W07107.51
-W     007 5229      N4227.54 W07107.50
-W     008 5237      N4227.42 W07107.47
-W     009 5254      N4227.26 W07107.26
-W     010 5258      N4227.09 W07107.30
-W     011 5264      N4227.26 W07107.24
-W     012 526708    N4227.47 W07107.26
-W     013 526750    N4227.43 W07107.22
-W     014 527614    N4227.40 W07107.18
-W     015 527631    N4227.38 W07107.16
-W     016 5278      N4227.49 W07107.15
-W     017 5289      N4227.56 W07107.06
-W     018 5374FIRE  N4227.85 W07107.19
-W     019 5376      N4227.94 W07107.16
-W     020 6006      N4226.34 W07106.87
-W     021 6006BLUE  N4226.32 W07106.89
-W     022 6014MEADW N4226.21 W07106.79
-W     023 6029      N4226.51 W07106.79
-W     024 6053      N4226.17 W07106.54
-W     025 6066      N4226.36 W07106.45
-W     026 6067      N4226.39 W07106.45
-W     027 6071      N4226.09 W07106.35
-W     028 6073      N4226.00 W07106.40
-W     029 6084      N4226.24 W07106.29
-W     030 6130      N4226.53 W07106.66
-W     031 6131      N4226.58 W07106.69
-W     032 6153      N4226.69 W07106.53
-W     033 6171      N4226.62 W07106.38
-W     034 6176      N4226.87 W07106.40
-W     035 6177      N4226.91 W07106.37
-W     036 6272      N4227.20 W07106.41
-W     037 6272.1    N4227.21 W07106.44
-W     038 6278      N4227.50 W07106.41
-W     039 6280      N4227.09 W07106.32
-W     040 6283      N4227.23 W07106.31
-W     041 6289      N4227.60 W07106.37
-W     042 6297      N4227.46 W07106.31
-W     043 6328      N4228.03 W07106.81
-W     044 6354      N4227.85 W07106.59
-W     045 635722    N4227.99 W07106.60
-W     046 635783    N4227.99 W07106.56
-W     047 6373      N4227.81 W07106.43
-W     048 6634      N4224.06 W07106.61
-W     049 6979      N4225.96 W07106.39
-W     050 6997      N4225.86 W07106.47
-W     051 BEARHILL  N4227.94 W07106.44
-W     052 BELLEVUE  N4225.86 W07106.46
-W     053 6016      N4226.32 W07106.84
-W     054 5236BRIDG N4227.39 W07107.48
-W     055 5376BRIDG N4227.95 W07107.19
-W     056 6181CROSS N4226.58 W07106.35
-W     057 6042CROSS N4226.13 W07106.58
-W     058 DARKHOLLP N4227.51 W07106.22
-W     059 6121DEAD  N4226.59 W07106.76
-W     060 5179DEAD  N4226.99 W07107.16
-W     061 5299DEAD  N4227.58 W07106.99
-W     062 5376DEAD  N4227.93 W07107.15
-W     063 6353DEAD  N4227.77 W07106.60
-W     064 6155DEAD  N4226.81 W07106.53
-W     065 GATE14    N4227.07 W07107.60
-W     066 GATE16    N4227.51 W07107.32
-W     067 GATE17    N4227.56 W07107.15
-W     068 GATE19    N4227.98 W07107.15
-W     069 GATE21    N4228.12 W07106.46
-W     070 GATE24    N4227.40 W07106.18
-W     071 GATE5     N4225.85 W07106.46
-W     072 GATE6     N4225.87 W07106.55
-W     073 6077LOGS  N4226.37 W07106.39
-W     074 5148NANEP N4226.99 W07107.34
-W     075 5267OBSTC N4227.44 W07107.19
-W     076 PANTHRCAV N4226.10 W07106.60
-W     077 5252PURPL N4227.20 W07107.27
-W     078 5287WATER N4227.46 W07107.05
-W     079 5239ROAD  N4227.56 W07107.47
-W     080 5278ROAD  N4227.53 W07107.14
-W     081 5058ROAD  N4226.40 W07107.26
-W     082 SHEEPFOLD N4227.20 W07106.41
-W     083 SOAPBOX   N4227.36 W07106.45
-W     084 5376STREM N4227.95 W07107.16
-W     085 5144SUMMT N4226.72 W07107.37
-W     086 5150TANK  N4226.50 W07107.30
diff --git a/reference/stmsdf.txt b/reference/stmsdf.txt
deleted file mode 100644 (file)
index e9981be..0000000
+++ /dev/null
@@ -1,83 +0,0 @@
-Grid   Lat/Lon hddd°mm.mmm'\r
-Datum  WGS 84\r
-\r
-Header Name    Description     Type    Position        Altitude        Depth   Proximity       Temperature     Display Mode    Color   Symbol  Facility        City    State   Country Date Modified   Link    Categories\r
-\r
-Waypoint       001             User Waypoint   N50 29.56 E12 06.33     0 m                             Symbol & Name   Unknown Waypoint                                                        \r
-Waypoint       002             User Waypoint   N50 29.56 E12 06.33     0 m                             Symbol & Name   Unknown Waypoint                                                        \r
-Waypoint       003             User Waypoint   N50 29.66 E12 06.31     0 m                             Symbol & Name   Unknown Waypoint                                                        \r
-Waypoint       004             User Waypoint   N50 29.63 E12 06.37     0 m                             Symbol & Name   Unknown Waypoint                                                        \r
-Waypoint       005             User Waypoint   N50 29.63 E12 06.37     0 m                             Symbol & Name   Unknown Waypoint                                                        \r
-Waypoint       006             User Waypoint   N50 29.60 E12 06.43     0 m                             Symbol & Name   Unknown Waypoint                                                        \r
-Waypoint       007             User Waypoint   N50 29.62 E12 06.43     0 m                             Symbol & Name   Unknown Waypoint                                                        \r
-Waypoint       Jahnstrasse             User Waypoint   N50 29.62 E12 06.43     0 m                             Symbol & Name   Unknown Waypoint                                                        \r
-Waypoint       Liebknechtstrasse               User Waypoint   N50 29.63 E12 06.37     0 m                             Symbol & Name   Unknown Waypoint                                                        \r
-Waypoint       NARVA           User Waypoint   N50 29.56 E12 06.33     391 m                           Symbol & Name   Unknown Waypoint                                                        \r
-\r
-\r
-Header Name    Length  Course  Waypoints       Link\r
-\r
-Route          394 m   46° true        10 waypoints    \r
-\r
-Header Waypoint Name   Distance        Leg Length      Course\r
-\r
-Route Waypoint NARVA   0 m\r
-Route Waypoint 001     2 m     2 m     221° true\r
-Route Waypoint 002     2 m     0 m     0° true\r
-Route Waypoint 003     189 m   188 m   353° true\r
-Route Waypoint 004     274 m   85 m    126° true\r
-Route Waypoint Liebknechtstrasse       274 m   0 m     299° true\r
-Route Waypoint 005     274 m   0 m     119° true\r
-Route Waypoint 006     361 m   88 m    126° true\r
-Route Waypoint 007     393 m   32 m    6° true\r
-Route Waypoint Jahnstrasse     394 m   1 m     351° true\r
-\r
-\r
-Header Name    Start Time      Elapsed Time    Length  Average Speed   Link\r
-\r
-Track  ACTIVE LOG 006  01/05/2005 15:02:47     0:33:09 653 m   1.2 kph \r
-\r
-Header Position        Time    Altitude        Depth   Temperature     Leg Length      Leg Time        Leg Speed       Leg Course\r
-\r
-Trackpoint     N51 18.78 E12 24.79     01/05/2005 15:02:47     161 m   \r
-Trackpoint     N51 18.77 E12 24.79     01/05/2005 15:03:25     154 m                   8 m     0:00:38 0.8 kph 137° true\r
-Trackpoint     N51 18.77 E12 24.79     01/05/2005 15:03:39     148 m                   3 m     0:00:14 0.8 kph 180° true\r
-Trackpoint     N51 18.77 E12 24.80     01/05/2005 15:04:16     139 m                   5 m     0:00:37 0.5 kph 129° true\r
-Trackpoint     N51 18.77 E12 24.80     01/05/2005 15:05:02     145 m                   2 m     0:00:46 0.2 kph 270° true\r
-Trackpoint     N51 18.77 E12 24.80     01/05/2005 15:05:45     134 m                   2 m     0:00:43 0.2 kph 90° true\r
-Trackpoint     N51 18.77 E12 24.80     01/05/2005 15:06:44     131 m                   6 m     0:00:59 0.4 kph 162° true\r
-Trackpoint     N51 18.77 E12 24.80     01/05/2005 15:07:50     130 m                   0 m     0:01:06 0 kph   0° true\r
-Trackpoint     N51 18.76 E12 24.80     01/05/2005 15:08:19     132 m                   3 m     0:00:29 0.4 kph 180° true\r
-Trackpoint     N51 18.77 E12 24.80     01/05/2005 15:11:16     144 m                   6 m     0:02:57 0.1 kph 342° true\r
-Trackpoint     N51 18.77 E12 24.81     01/05/2005 15:12:34     147 m                   16 m    0:01:18 0.7 kph 38° true\r
-Trackpoint     N51 18.78 E12 24.83     01/05/2005 15:13:18     145 m                   27 m    0:00:44 2 kph   70° true\r
-Trackpoint     N51 18.78 E12 24.83     01/05/2005 15:13:27     145 m                   6 m     0:00:09 2 kph   0° true\r
-Trackpoint     N51 18.78 E12 24.83     01/05/2005 15:13:37     135 m                   2 m     0:00:10 0.7 kph 90° true\r
-Trackpoint     N51 18.79 E12 24.83     01/05/2005 15:13:46     135 m                   6 m     0:00:09 2 kph   0° true\r
-Trackpoint     N51 18.79 E12 24.83     01/05/2005 15:14:03     136 m                   13 m    0:00:17 3 kph   17° true\r
-Trackpoint     N51 18.80 E12 24.84     01/05/2005 15:14:16     135 m                   11 m    0:00:13 3 kph   32° true\r
-Trackpoint     N51 18.80 E12 24.84     01/05/2005 15:14:26     139 m                   7 m     0:00:10 2 kph   117° true\r
-Trackpoint     N51 18.80 E12 24.85     01/05/2005 15:14:30     139 m                   4 m     0:00:04 4 kph   90° true\r
-Trackpoint     N51 18.78 E12 24.88     01/05/2005 15:15:06     141 m                   43 m    0:00:36 4 kph   126° true\r
-Trackpoint     N51 18.78 E12 24.89     01/05/2005 15:15:27     140 m                   18 m    0:00:21 3 kph   121° true\r
-Trackpoint     N51 18.77 E12 24.90     01/05/2005 15:15:39     140 m                   10 m    0:00:12 3 kph   128° true\r
-Trackpoint     N51 18.78 E12 24.90     01/05/2005 15:25:31     152 m                   4 m     0:09:52 0.0 kph 33° true\r
-Trackpoint     N51 18.78 E12 24.90     01/05/2005 15:25:40     152 m                   0 m     0:00:09 0 kph   0° true\r
-Trackpoint     N51 18.78 E12 24.90     01/05/2005 15:29:18     155 m                   4 m     0:03:38 0.1 kph 328° true\r
-Trackpoint     N51 18.79 E12 24.87     01/05/2005 15:30:30     149 m                   33 m    0:01:12 2 kph   311° true\r
-Trackpoint     N51 18.79 E12 24.87     01/05/2005 15:30:37     150 m                   2 m     0:00:07 1.0 kph 270° true\r
-Trackpoint     N51 18.79 E12 24.87     01/05/2005 15:30:47     151 m                   8 m     0:00:10 3 kph   270° true\r
-Trackpoint     N51 18.79 E12 24.86     01/05/2005 15:30:48     151 m                   4 m     0:00:01 14 kph  270° true\r
-Trackpoint     N51 18.80 E12 24.83     01/05/2005 15:30:52     150 m                   38 m    0:00:04 34 kph  300° true\r
-Trackpoint     N51 18.82 E12 24.80     01/05/2005 15:30:57     150 m                   57 m    0:00:05 41 kph  315° true\r
-Trackpoint     N51 18.84 E12 24.77     01/05/2005 15:31:03     150 m                   47 m    0:00:06 28 kph  316° true\r
-Trackpoint     N51 18.85 E12 24.75     01/05/2005 15:31:10     150 m                   35 m    0:00:07 18 kph  314° true\r
-Trackpoint     N51 18.88 E12 24.57     01/05/2005 15:32:38     143 m                   210 m   0:01:28 9 kph   283° true\r
-Trackpoint     N51 18.88 E12 24.57     01/05/2005 15:32:45     141 m                   4 m     0:00:07 2 kph   270° true\r
-Trackpoint     N51 18.88 E12 24.57     01/05/2005 15:33:17     143 m                   0 m     0:00:32 0 kph   0° true\r
-Trackpoint     N51 18.88 E12 24.57     01/05/2005 15:33:42     139 m                   4 m     0:00:25 0.6 kph 270° true\r
-Trackpoint     N51 18.88 E12 24.56     01/05/2005 15:33:54     139 m                   6 m     0:00:12 2 kph   270° true\r
-Trackpoint     N51 18.88 E12 24.56     01/05/2005 15:34:04     138 m                   0 m     0:00:10 0 kph   0° true\r
-Trackpoint     N51 18.88 E12 24.56     01/05/2005 15:34:20     139 m                   0 m     0:00:16 0 kph   0° true\r
-Trackpoint     N51 18.88 E12 24.56     01/05/2005 15:35:45     144 m                   0 m     0:01:25 0 kph   0° true\r
-Trackpoint     N51 18.88 E12 24.56     01/05/2005 15:35:56     145 m                   0 m     0:00:11 0 kph   0° true\r
diff --git a/reference/vitosmt.gpx b/reference/vitosmt.gpx
deleted file mode 100644 (file)
index a892749..0000000
+++ /dev/null
@@ -1,2195 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<gpx version="1.0" creator="GPSBabel - https://www.gpsbabel.org" xmlns="http://www.topografix.com/GPX/1/0">
-  <time>1970-01-01T00:00:00Z</time>
-  <bounds minlat="45.458204984" minlon="-75.770526640" maxlat="45.497519984" maxlon="-75.684934974"/>
-  <wpt lat="45.460366651" lon="-75.767939974">
-    <ele>33.700</ele>
-    <time>2005-05-09T19:02:01.517Z</time>
-    <name>WP0001</name>
-    <cmt>WP0001</cmt>
-    <desc>WP0001</desc>
-    <fix>2d</fix>
-    <sat>3</sat>
-    <pdop>30.600000</pdop>
-  </wpt>
-  <wpt lat="45.460339984" lon="-75.767591640">
-    <ele>33.700</ele>
-    <time>2005-05-09T19:02:03.517Z</time>
-    <name>WP0002</name>
-    <cmt>WP0002</cmt>
-    <desc>WP0002</desc>
-    <fix>2d</fix>
-    <sat>3</sat>
-    <pdop>30.600000</pdop>
-  </wpt>
-  <wpt lat="45.458376651" lon="-75.768483307">
-    <ele>105.400</ele>
-    <time>2005-05-09T20:09:13.594Z</time>
-    <name>WP0003</name>
-    <cmt>WP0003</cmt>
-    <desc>WP0003</desc>
-    <fix>dgps</fix>
-    <sat>7</sat>
-    <pdop>1.400000</pdop>
-  </wpt>
-  <wpt lat="45.458293318" lon="-75.768566640">
-    <ele>104.600</ele>
-    <time>2005-05-09T20:09:23.593Z</time>
-    <name>WP0004</name>
-    <cmt>WP0004</cmt>
-    <desc>WP0004</desc>
-    <fix>dgps</fix>
-    <sat>5</sat>
-    <pdop>2.400000</pdop>
-  </wpt>
-  <wpt lat="45.458298318" lon="-75.768701640">
-    <ele>102.500</ele>
-    <time>2005-05-09T20:09:44.592Z</time>
-    <name>WP0005</name>
-    <cmt>WP0005</cmt>
-    <desc>WP0005</desc>
-    <fix>dgps</fix>
-    <sat>5</sat>
-    <pdop>2.400000</pdop>
-  </wpt>
-  <wpt lat="45.458266651" lon="-75.769021640">
-    <ele>108.900</ele>
-    <time>2005-05-09T20:10:04.590Z</time>
-    <name>WP0006</name>
-    <cmt>WP0006</cmt>
-    <desc>WP0006</desc>
-    <fix>dgps</fix>
-    <sat>6</sat>
-    <pdop>2.200000</pdop>
-  </wpt>
-  <wpt lat="45.458204984" lon="-75.770038307">
-    <ele>108.400</ele>
-    <time>2005-05-09T20:11:22.585Z</time>
-    <name>WP0007</name>
-    <cmt>WP0007</cmt>
-    <desc>WP0007</desc>
-    <fix>dgps</fix>
-    <sat>9</sat>
-    <pdop>1.000000</pdop>
-  </wpt>
-  <wpt lat="45.458274984" lon="-75.770526640">
-    <ele>110.600</ele>
-    <time>2005-05-09T20:11:50.583Z</time>
-    <name>WP0008</name>
-    <cmt>WP0008</cmt>
-    <desc>WP0008</desc>
-    <fix>dgps</fix>
-    <sat>8</sat>
-    <pdop>1.400000</pdop>
-  </wpt>
-  <wpt lat="45.458353318" lon="-75.770481640">
-    <ele>106.200</ele>
-    <time>2005-05-09T20:14:00.575Z</time>
-    <name>WP0009</name>
-    <cmt>WP0009</cmt>
-    <desc>WP0009</desc>
-    <fix>dgps</fix>
-    <sat>10</sat>
-    <pdop>1.000000</pdop>
-  </wpt>
-  <wpt lat="45.492471651" lon="-75.717699974">
-    <ele>34.100</ele>
-    <time>2005-05-09T21:36:00.758Z</time>
-    <name>WP0010</name>
-    <cmt>WP0010</cmt>
-    <desc>WP0010</desc>
-    <fix>2d</fix>
-    <sat>3</sat>
-    <pdop>7.000000</pdop>
-  </wpt>
-  <wpt lat="45.492506651" lon="-75.717636640">
-    <ele>-22.300</ele>
-    <time>2005-06-03T21:36:06.757Z</time>
-    <name>WP0011</name>
-    <cmt>WP0011</cmt>
-    <desc>WP0011</desc>
-    <fix>dgps</fix>
-    <sat>5</sat>
-    <pdop>2.600000</pdop>
-  </wpt>
-  <wpt lat="45.492283318" lon="-75.717694974">
-    <ele>-34.800</ele>
-    <time>2005-06-03T21:36:08.757Z</time>
-    <name>WP0012</name>
-    <cmt>WP0012</cmt>
-    <desc>WP0012</desc>
-    <fix>3d</fix>
-    <sat>4</sat>
-    <pdop>3.400000</pdop>
-  </wpt>
-  <wpt lat="45.492396651" lon="-75.717684974">
-    <ele>-28.700</ele>
-    <time>2005-06-03T21:36:09.757Z</time>
-    <name>WP0013</name>
-    <cmt>WP0013</cmt>
-    <desc>WP0013</desc>
-    <fix>dgps</fix>
-    <sat>5</sat>
-    <pdop>2.600000</pdop>
-  </wpt>
-  <wpt lat="45.492381651" lon="-75.717586640">
-    <ele>-21.000</ele>
-    <time>2005-06-03T21:36:17.757Z</time>
-    <name>WP0014</name>
-    <cmt>WP0014</cmt>
-    <desc>WP0014</desc>
-    <fix>3d</fix>
-    <sat>4</sat>
-    <pdop>3.800000</pdop>
-  </wpt>
-  <wpt lat="45.492294984" lon="-75.717593307">
-    <ele>-25.300</ele>
-    <time>2005-06-03T21:36:31.756Z</time>
-    <name>WP0015</name>
-    <cmt>WP0015</cmt>
-    <desc>WP0015</desc>
-    <sat>2</sat>
-  </wpt>
-  <wpt lat="45.491944984" lon="-75.717474974">
-    <ele>43.400</ele>
-    <time>2005-06-03T21:36:45.755Z</time>
-    <name>WP0016</name>
-    <cmt>WP0016</cmt>
-    <desc>WP0016</desc>
-    <fix>3d</fix>
-    <sat>4</sat>
-    <pdop>3.800000</pdop>
-  </wpt>
-  <wpt lat="45.491938318" lon="-75.717353307">
-    <ele>39.300</ele>
-    <time>2005-06-03T21:36:51.754Z</time>
-    <name>WP0017</name>
-    <cmt>WP0017</cmt>
-    <desc>WP0017</desc>
-    <fix>dgps</fix>
-    <sat>6</sat>
-    <pdop>1.600000</pdop>
-  </wpt>
-  <wpt lat="45.491969984" lon="-75.717238307">
-    <ele>48.300</ele>
-    <time>2005-06-03T21:36:58.754Z</time>
-    <name>WP0018</name>
-    <cmt>WP0018</cmt>
-    <desc>WP0018</desc>
-    <fix>dgps</fix>
-    <sat>5</sat>
-    <pdop>1.600000</pdop>
-  </wpt>
-  <wpt lat="45.491994984" lon="-75.717094974">
-    <ele>44.500</ele>
-    <time>2005-06-03T21:37:07.753Z</time>
-    <name>WP0019</name>
-    <cmt>WP0019</cmt>
-    <desc>WP0019</desc>
-    <fix>dgps</fix>
-    <sat>5</sat>
-    <pdop>1.600000</pdop>
-  </wpt>
-  <wpt lat="45.491996651" lon="-75.716914974">
-    <ele>39.900</ele>
-    <time>2005-06-03T21:37:18.753Z</time>
-    <name>WP0020</name>
-    <cmt>WP0020</cmt>
-    <desc>WP0020</desc>
-    <fix>dgps</fix>
-    <sat>5</sat>
-    <pdop>2.600000</pdop>
-  </wpt>
-  <wpt lat="45.492019984" lon="-75.716781640">
-    <ele>23.600</ele>
-    <time>2005-06-03T21:37:26.752Z</time>
-    <name>WP0021</name>
-    <cmt>WP0021</cmt>
-    <desc>WP0021</desc>
-    <fix>dgps</fix>
-    <sat>5</sat>
-    <pdop>2.600000</pdop>
-  </wpt>
-  <wpt lat="45.492071651" lon="-75.716738307">
-    <ele>46.700</ele>
-    <time>2005-06-03T21:37:46.751Z</time>
-    <name>WP0022</name>
-    <cmt>WP0022</cmt>
-    <desc>WP0022</desc>
-    <fix>3d</fix>
-    <sat>4</sat>
-    <pdop>4.000000</pdop>
-  </wpt>
-  <wpt lat="45.492071651" lon="-75.716736640">
-    <ele>61.300</ele>
-    <time>2005-06-03T21:37:52.750Z</time>
-    <name>WP0023</name>
-    <cmt>WP0023</cmt>
-    <desc>WP0023</desc>
-    <fix>dgps</fix>
-    <sat>5</sat>
-    <pdop>1.600000</pdop>
-  </wpt>
-  <wpt lat="45.492096651" lon="-75.716736640">
-    <ele>74.600</ele>
-    <time>2005-06-03T21:38:16.749Z</time>
-    <name>WP0024</name>
-    <cmt>WP0024</cmt>
-    <desc>WP0024</desc>
-    <fix>3d</fix>
-    <sat>4</sat>
-    <pdop>4.000000</pdop>
-  </wpt>
-  <wpt lat="45.492099984" lon="-75.716729974">
-    <ele>63.600</ele>
-    <time>2005-06-03T21:38:50.747Z</time>
-    <name>WP0025</name>
-    <cmt>WP0025</cmt>
-    <desc>WP0025</desc>
-    <fix>3d</fix>
-    <sat>4</sat>
-    <pdop>2.200000</pdop>
-  </wpt>
-  <wpt lat="45.492721651" lon="-75.718441640">
-    <ele>83.600</ele>
-    <time>2005-06-03T21:55:06.472Z</time>
-    <name>WP0026</name>
-    <cmt>WP0026</cmt>
-    <desc>WP0026</desc>
-    <fix>3d</fix>
-    <sat>4</sat>
-    <pdop>5.200000</pdop>
-  </wpt>
-  <wpt lat="45.492656651" lon="-75.718409974">
-    <ele>76.200</ele>
-    <time>2005-06-03T21:55:14.472Z</time>
-    <name>WP0027</name>
-    <cmt>WP0027</cmt>
-    <desc>WP0027</desc>
-    <fix>3d</fix>
-    <sat>4</sat>
-    <pdop>5.200000</pdop>
-  </wpt>
-  <wpt lat="45.492591651" lon="-75.718313307">
-    <ele>76.300</ele>
-    <time>2005-06-03T21:57:31.463Z</time>
-    <name>WP0028</name>
-    <cmt>WP0028</cmt>
-    <desc>WP0028</desc>
-    <fix>2d</fix>
-    <sat>3</sat>
-    <pdop>10.600000</pdop>
-  </wpt>
-  <wpt lat="45.492568318" lon="-75.718309974">
-    <ele>59.800</ele>
-    <time>2005-06-03T21:57:54.461Z</time>
-    <name>WP0029</name>
-    <cmt>WP0029</cmt>
-    <desc>WP0029</desc>
-    <fix>3d</fix>
-    <sat>4</sat>
-    <pdop>5.200000</pdop>
-  </wpt>
-  <wpt lat="45.492314984" lon="-75.718339974">
-    <ele>34.300</ele>
-    <time>2005-06-04T23:06:26.359Z</time>
-    <name>WP0030</name>
-    <cmt>WP0030</cmt>
-    <desc>WP0030</desc>
-    <fix>2d</fix>
-    <sat>3</sat>
-    <pdop>25.400000</pdop>
-  </wpt>
-  <wpt lat="45.491909984" lon="-75.718324974">
-    <ele>34.300</ele>
-    <time>2005-06-04T23:14:32.327Z</time>
-    <name>WP0031</name>
-    <cmt>WP0031</cmt>
-    <desc>WP0031</desc>
-    <fix>2d</fix>
-    <sat>3</sat>
-    <pdop>28.200001</pdop>
-  </wpt>
-  <wpt lat="45.492206651" lon="-75.718414974">
-    <ele>34.300</ele>
-    <time>2005-06-04T23:14:43.327Z</time>
-    <name>WP0032</name>
-    <cmt>WP0032</cmt>
-    <desc>WP0032</desc>
-    <fix>2d</fix>
-    <sat>3</sat>
-    <pdop>28.200001</pdop>
-  </wpt>
-  <wpt lat="45.492689984" lon="-75.718359974">
-    <ele>70.800</ele>
-    <time>2005-06-04T23:15:39.323Z</time>
-    <name>WP0033</name>
-    <cmt>WP0033</cmt>
-    <desc>WP0033</desc>
-    <fix>dgps</fix>
-    <sat>5</sat>
-    <pdop>1.800000</pdop>
-  </wpt>
-  <wpt lat="45.492691651" lon="-75.718408307">
-    <ele>61.200</ele>
-    <time>2005-06-04T23:16:38.319Z</time>
-    <name>WP0034</name>
-    <cmt>WP0034</cmt>
-    <desc>WP0034</desc>
-    <fix>3d</fix>
-    <sat>4</sat>
-    <pdop>2.000000</pdop>
-  </wpt>
-  <wpt lat="45.492601651" lon="-75.718438307">
-    <ele>62.400</ele>
-    <time>2005-06-04T23:17:21.316Z</time>
-    <name>WP0035</name>
-    <cmt>WP0035</cmt>
-    <desc>WP0035</desc>
-    <sat>1</sat>
-  </wpt>
-  <wpt lat="45.492479984" lon="-75.718403307">
-    <ele>54.200</ele>
-    <time>2005-06-04T23:22:58.294Z</time>
-    <name>WP0036</name>
-    <cmt>WP0036</cmt>
-    <desc>WP0036</desc>
-    <fix>3d</fix>
-    <sat>4</sat>
-    <pdop>6.800000</pdop>
-  </wpt>
-  <wpt lat="45.492566651" lon="-75.718339974">
-    <ele>57.000</ele>
-    <time>2005-06-04T23:25:52.283Z</time>
-    <name>WP0037</name>
-    <cmt>WP0037</cmt>
-    <desc>WP0037</desc>
-    <fix>3d</fix>
-    <sat>4</sat>
-    <pdop>19.400000</pdop>
-  </wpt>
-  <wpt lat="45.492343318" lon="-75.722331640">
-    <ele>0.000</ele>
-    <time>2005-06-04T23:39:14.663Z</time>
-    <name>WP0038</name>
-    <cmt>WP0038</cmt>
-    <desc>WP0038</desc>
-    <pdop>24.700001</pdop>
-  </wpt>
-  <wpt lat="45.492314984" lon="-75.722923307">
-    <ele>57.600</ele>
-    <time>2005-06-04T23:39:18.662Z</time>
-    <name>WP0039</name>
-    <cmt>WP0039</cmt>
-    <desc>WP0039</desc>
-    <fix>3d</fix>
-    <sat>4</sat>
-    <pdop>17.799999</pdop>
-  </wpt>
-  <wpt lat="45.492369984" lon="-75.722586640">
-    <ele>74.800</ele>
-    <time>2005-06-04T23:39:19.662Z</time>
-    <name>WP0040</name>
-    <cmt>WP0040</cmt>
-    <desc>WP0040</desc>
-    <fix>dgps</fix>
-    <sat>7</sat>
-    <pdop>1.000000</pdop>
-  </wpt>
-  <wpt lat="45.493596651" lon="-75.728018307">
-    <ele>95.100</ele>
-    <time>2005-06-04T23:44:29.868Z</time>
-    <name>WP0041</name>
-    <cmt>WP0041</cmt>
-    <desc>WP0041</desc>
-    <fix>dgps</fix>
-    <sat>5</sat>
-    <pdop>1.600000</pdop>
-  </wpt>
-  <wpt lat="45.492388318" lon="-75.731491640">
-    <ele>69.100</ele>
-    <time>2005-06-04T23:50:38.425Z</time>
-    <name>WP0042</name>
-    <cmt>WP0042</cmt>
-    <desc>WP0042</desc>
-    <fix>dgps</fix>
-    <sat>7</sat>
-    <pdop>1.000000</pdop>
-  </wpt>
-  <wpt lat="45.492379984" lon="-75.731639974">
-    <ele>71.300</ele>
-    <time>2005-06-04T23:52:35.417Z</time>
-    <name>WP0043</name>
-    <cmt>WP0043</cmt>
-    <desc>WP0043</desc>
-    <fix>dgps</fix>
-    <sat>7</sat>
-    <pdop>1.000000</pdop>
-  </wpt>
-  <wpt lat="45.492419984" lon="-75.731754974">
-    <ele>71.300</ele>
-    <time>2005-06-04T23:52:43.417Z</time>
-    <name>WP0044</name>
-    <cmt>WP0044</cmt>
-    <desc>WP0044</desc>
-    <fix>dgps</fix>
-    <sat>6</sat>
-    <pdop>1.400000</pdop>
-  </wpt>
-  <wpt lat="45.492678318" lon="-75.732136640">
-    <ele>71.300</ele>
-    <time>2005-06-04T23:53:15.415Z</time>
-    <name>WP0045</name>
-    <cmt>WP0045</cmt>
-    <desc>WP0045</desc>
-    <fix>dgps</fix>
-    <sat>6</sat>
-    <pdop>1.400000</pdop>
-  </wpt>
-  <wpt lat="45.492764984" lon="-75.732181640">
-    <ele>70.700</ele>
-    <time>2005-06-04T23:53:25.414Z</time>
-    <name>WP0046</name>
-    <cmt>WP0046</cmt>
-    <desc>WP0046</desc>
-    <fix>dgps</fix>
-    <sat>6</sat>
-    <pdop>1.400000</pdop>
-  </wpt>
-  <wpt lat="45.493056651" lon="-75.734448307">
-    <ele>68.400</ele>
-    <time>2005-06-04T23:56:24.496Z</time>
-    <name>WP0047</name>
-    <cmt>WP0047</cmt>
-    <desc>WP0047</desc>
-    <fix>dgps</fix>
-    <sat>6</sat>
-    <pdop>1.200000</pdop>
-  </wpt>
-  <wpt lat="45.492984984" lon="-75.734376640">
-    <ele>72.900</ele>
-    <time>2005-06-04T23:56:54.494Z</time>
-    <name>WP0048</name>
-    <cmt>WP0048</cmt>
-    <desc>WP0048</desc>
-    <fix>dgps</fix>
-    <sat>6</sat>
-    <pdop>1.200000</pdop>
-  </wpt>
-  <wpt lat="45.493048318" lon="-75.734484974">
-    <ele>71.400</ele>
-    <time>2005-06-04T23:57:12.493Z</time>
-    <name>WP0049</name>
-    <cmt>WP0049</cmt>
-    <desc>WP0049</desc>
-    <fix>dgps</fix>
-    <sat>7</sat>
-    <pdop>1.000000</pdop>
-  </wpt>
-  <wpt lat="45.493248318" lon="-75.734873307">
-    <ele>71.200</ele>
-    <time>2005-06-04T23:57:43.491Z</time>
-    <name>WP0050</name>
-    <cmt>WP0050</cmt>
-    <desc>WP0050</desc>
-    <fix>dgps</fix>
-    <sat>8</sat>
-    <pdop>1.000000</pdop>
-  </wpt>
-  <wpt lat="45.493511651" lon="-75.735343307">
-    <ele>71.600</ele>
-    <time>2005-06-04T23:58:26.488Z</time>
-    <name>WP0051</name>
-    <cmt>WP0051</cmt>
-    <desc>WP0051</desc>
-    <fix>dgps</fix>
-    <sat>7</sat>
-    <pdop>1.400000</pdop>
-  </wpt>
-  <wpt lat="45.494089984" lon="-75.736121640">
-    <ele>71.000</ele>
-    <time>2005-06-04T00:00:00.482Z</time>
-    <name>WP0052</name>
-    <cmt>WP0052</cmt>
-    <desc>WP0052</desc>
-    <sat>2</sat>
-  </wpt>
-  <wpt lat="45.494091651" lon="-75.736254974">
-    <ele>72.100</ele>
-    <time>2005-06-05T00:00:11.482Z</time>
-    <name>WP0053</name>
-    <cmt>WP0053</cmt>
-    <desc>WP0053</desc>
-    <sat>2</sat>
-  </wpt>
-  <wpt lat="45.494156651" lon="-75.736351640">
-    <ele>72.700</ele>
-    <time>2005-06-05T00:00:20.481Z</time>
-    <name>WP0054</name>
-    <cmt>WP0054</cmt>
-    <desc>WP0054</desc>
-    <fix>2d</fix>
-    <sat>3</sat>
-    <pdop>6.200000</pdop>
-  </wpt>
-  <wpt lat="45.494316651" lon="-75.736706640">
-    <ele>72.200</ele>
-    <time>2005-06-05T00:00:48.479Z</time>
-    <name>WP0055</name>
-    <cmt>WP0055</cmt>
-    <desc>WP0055</desc>
-    <sat>2</sat>
-  </wpt>
-  <wpt lat="45.494326651" lon="-75.736839974">
-    <ele>72.500</ele>
-    <time>2005-06-05T00:00:59.478Z</time>
-    <name>WP0056</name>
-    <cmt>WP0056</cmt>
-    <desc>WP0056</desc>
-    <sat>2</sat>
-  </wpt>
-  <wpt lat="45.494348318" lon="-75.737104974">
-    <ele>73.000</ele>
-    <time>2005-06-05T00:01:09.478Z</time>
-    <name>WP0057</name>
-    <cmt>WP0057</cmt>
-    <desc>WP0057</desc>
-    <sat>2</sat>
-  </wpt>
-  <wpt lat="45.494411651" lon="-75.737268307">
-    <ele>73.300</ele>
-    <time>2005-06-05T00:01:44.475Z</time>
-    <name>WP0058</name>
-    <cmt>WP0058</cmt>
-    <desc>WP0058</desc>
-    <fix>2d</fix>
-    <sat>3</sat>
-    <pdop>19.400000</pdop>
-  </wpt>
-  <wpt lat="45.494488318" lon="-75.737228307">
-    <ele>78.100</ele>
-    <time>2005-06-05T00:01:58.474Z</time>
-    <name>WP0059</name>
-    <cmt>WP0059</cmt>
-    <desc>WP0059</desc>
-    <fix>2d</fix>
-    <sat>3</sat>
-    <pdop>6.000000</pdop>
-  </wpt>
-  <wpt lat="45.494713318" lon="-75.737163307">
-    <ele>77.000</ele>
-    <time>2005-06-05T00:02:16.473Z</time>
-    <name>WP0060</name>
-    <cmt>WP0060</cmt>
-    <desc>WP0060</desc>
-    <fix>3d</fix>
-    <sat>4</sat>
-    <pdop>4.200000</pdop>
-  </wpt>
-  <wpt lat="45.494818318" lon="-75.737188307">
-    <ele>75.500</ele>
-    <time>2005-06-05T00:02:25.473Z</time>
-    <name>WP0061</name>
-    <cmt>WP0061</cmt>
-    <desc>WP0061</desc>
-    <fix>3d</fix>
-    <sat>4</sat>
-    <pdop>4.200000</pdop>
-  </wpt>
-  <wpt lat="45.495011651" lon="-75.737183307">
-    <ele>71.000</ele>
-    <time>2005-06-05T00:02:42.472Z</time>
-    <name>WP0062</name>
-    <cmt>WP0062</cmt>
-    <desc>WP0062</desc>
-    <fix>3d</fix>
-    <sat>4</sat>
-    <pdop>12.400000</pdop>
-  </wpt>
-  <wpt lat="45.495254984" lon="-75.737171640">
-    <ele>75.800</ele>
-    <time>2005-06-05T00:03:21.469Z</time>
-    <name>WP0063</name>
-    <cmt>WP0063</cmt>
-    <desc>WP0063</desc>
-    <fix>3d</fix>
-    <sat>4</sat>
-    <pdop>4.200000</pdop>
-  </wpt>
-  <wpt lat="45.495354984" lon="-75.737114974">
-    <ele>72.600</ele>
-    <time>2005-06-05T00:03:31.468Z</time>
-    <name>WP0064</name>
-    <cmt>WP0064</cmt>
-    <desc>WP0064</desc>
-    <fix>dgps</fix>
-    <sat>6</sat>
-    <pdop>1.600000</pdop>
-  </wpt>
-  <wpt lat="45.495581651" lon="-75.736874974">
-    <ele>70.300</ele>
-    <time>2005-06-05T00:03:53.467Z</time>
-    <name>WP0065</name>
-    <cmt>WP0065</cmt>
-    <desc>WP0065</desc>
-    <fix>dgps</fix>
-    <sat>5</sat>
-    <pdop>2.800000</pdop>
-  </wpt>
-  <wpt lat="45.495921651" lon="-75.736509974">
-    <ele>74.600</ele>
-    <time>2005-06-05T00:04:31.464Z</time>
-    <name>WP0066</name>
-    <cmt>WP0066</cmt>
-    <desc>WP0066</desc>
-    <fix>dgps</fix>
-    <sat>5</sat>
-    <pdop>1.800000</pdop>
-  </wpt>
-  <wpt lat="45.495844984" lon="-75.736588307">
-    <ele>76.300</ele>
-    <time>2005-06-05T00:05:05.462Z</time>
-    <name>WP0067</name>
-    <cmt>WP0067</cmt>
-    <desc>WP0067</desc>
-    <fix>dgps</fix>
-    <sat>5</sat>
-    <pdop>1.600000</pdop>
-  </wpt>
-  <wpt lat="45.495876651" lon="-75.736471640">
-    <ele>72.100</ele>
-    <time>2005-06-05T00:05:45.459Z</time>
-    <name>WP0068</name>
-    <cmt>WP0068</cmt>
-    <desc>WP0068</desc>
-    <fix>2d</fix>
-    <sat>3</sat>
-    <pdop>5.200000</pdop>
-  </wpt>
-  <wpt lat="45.495916651" lon="-75.736536640">
-    <ele>80.900</ele>
-    <time>2005-06-05T00:06:19.457Z</time>
-    <name>WP0069</name>
-    <cmt>WP0069</cmt>
-    <desc>WP0069</desc>
-    <fix>3d</fix>
-    <sat>4</sat>
-    <pdop>4.000000</pdop>
-  </wpt>
-  <wpt lat="45.495866651" lon="-75.736521640">
-    <ele>89.500</ele>
-    <time>2005-06-05T00:06:25.457Z</time>
-    <name>WP0070</name>
-    <cmt>WP0070</cmt>
-    <desc>WP0070</desc>
-    <fix>3d</fix>
-    <sat>4</sat>
-    <pdop>4.000000</pdop>
-  </wpt>
-  <wpt lat="45.496203318" lon="-75.734848307">
-    <ele>102.100</ele>
-    <time>2005-06-05T00:37:53.913Z</time>
-    <name>WP0071</name>
-    <cmt>WP0071</cmt>
-    <desc>WP0071</desc>
-    <fix>3d</fix>
-    <sat>4</sat>
-    <pdop>2.200000</pdop>
-  </wpt>
-  <wpt lat="45.496083318" lon="-75.734841640">
-    <ele>102.800</ele>
-    <time>2005-06-11T00:38:21.912Z</time>
-    <name>WP0072</name>
-    <cmt>WP0072</cmt>
-    <desc>WP0072</desc>
-    <fix>2d</fix>
-    <sat>3</sat>
-    <pdop>13.400000</pdop>
-  </wpt>
-  <wpt lat="45.496109984" lon="-75.734754974">
-    <ele>94.100</ele>
-    <time>2005-06-11T00:38:55.909Z</time>
-    <name>WP0073</name>
-    <cmt>WP0073</cmt>
-    <desc>WP0073</desc>
-    <fix>dgps</fix>
-    <sat>5</sat>
-    <pdop>1.600000</pdop>
-  </wpt>
-  <wpt lat="45.496299984" lon="-75.734379974">
-    <ele>93.300</ele>
-    <time>2005-06-11T00:39:44.906Z</time>
-    <name>WP0074</name>
-    <cmt>WP0074</cmt>
-    <desc>WP0074</desc>
-    <fix>dgps</fix>
-    <sat>5</sat>
-    <pdop>1.600000</pdop>
-  </wpt>
-  <wpt lat="45.496259984" lon="-75.734368307">
-    <ele>83.800</ele>
-    <time>2005-06-11T00:40:44.902Z</time>
-    <name>WP0075</name>
-    <cmt>WP0075</cmt>
-    <desc>WP0075</desc>
-    <sat>2</sat>
-  </wpt>
-  <wpt lat="45.496204984" lon="-75.734474974">
-    <ele>85.100</ele>
-    <time>2005-06-11T00:41:04.901Z</time>
-    <name>WP0076</name>
-    <cmt>WP0076</cmt>
-    <desc>WP0076</desc>
-    <sat>2</sat>
-  </wpt>
-  <wpt lat="45.496191651" lon="-75.734614974">
-    <ele>85.600</ele>
-    <time>2005-06-11T00:41:11.900Z</time>
-    <name>WP0077</name>
-    <cmt>WP0077</cmt>
-    <desc>WP0077</desc>
-    <fix>2d</fix>
-    <sat>3</sat>
-    <pdop>16.000000</pdop>
-  </wpt>
-  <wpt lat="45.496134984" lon="-75.734768307">
-    <ele>85.900</ele>
-    <time>2005-06-11T00:41:19.900Z</time>
-    <name>WP0078</name>
-    <cmt>WP0078</cmt>
-    <desc>WP0078</desc>
-    <sat>2</sat>
-  </wpt>
-  <wpt lat="45.496108318" lon="-75.734911640">
-    <ele>85.200</ele>
-    <time>2005-06-11T00:41:27.899Z</time>
-    <name>WP0079</name>
-    <cmt>WP0079</cmt>
-    <desc>WP0079</desc>
-    <fix>3d</fix>
-    <sat>4</sat>
-    <pdop>2.400000</pdop>
-  </wpt>
-  <wpt lat="45.496044984" lon="-75.735079974">
-    <ele>87.100</ele>
-    <time>2005-06-11T00:41:43.898Z</time>
-    <name>WP0080</name>
-    <cmt>WP0080</cmt>
-    <desc>WP0080</desc>
-    <fix>3d</fix>
-    <sat>4</sat>
-    <pdop>3.200000</pdop>
-  </wpt>
-  <wpt lat="45.495993318" lon="-75.735166640">
-    <ele>82.300</ele>
-    <time>2005-06-11T00:41:51.898Z</time>
-    <name>WP0081</name>
-    <cmt>WP0081</cmt>
-    <desc>WP0081</desc>
-    <fix>dgps</fix>
-    <sat>6</sat>
-    <pdop>1.200000</pdop>
-  </wpt>
-  <wpt lat="45.495931651" lon="-75.735276640">
-    <ele>78.800</ele>
-    <time>2005-06-11T00:42:00.897Z</time>
-    <name>WP0082</name>
-    <cmt>WP0082</cmt>
-    <desc>WP0082</desc>
-    <fix>3d</fix>
-    <sat>4</sat>
-    <pdop>2.400000</pdop>
-  </wpt>
-  <wpt lat="45.495874984" lon="-75.735439974">
-    <ele>75.500</ele>
-    <time>2005-06-11T00:42:14.896Z</time>
-    <name>WP0083</name>
-    <cmt>WP0083</cmt>
-    <desc>WP0083</desc>
-    <fix>dgps</fix>
-    <sat>5</sat>
-    <pdop>1.400000</pdop>
-  </wpt>
-  <wpt lat="45.495826651" lon="-75.735561640">
-    <ele>74.100</ele>
-    <time>2005-06-11T00:42:25.895Z</time>
-    <name>WP0084</name>
-    <cmt>WP0084</cmt>
-    <desc>WP0084</desc>
-    <fix>3d</fix>
-    <sat>4</sat>
-    <pdop>2.000000</pdop>
-  </wpt>
-  <wpt lat="45.495858318" lon="-75.735689974">
-    <ele>72.500</ele>
-    <time>2005-06-11T00:42:50.894Z</time>
-    <name>WP0085</name>
-    <cmt>WP0085</cmt>
-    <desc>WP0085</desc>
-    <sat>2</sat>
-  </wpt>
-  <wpt lat="45.495931651" lon="-75.735779974">
-    <ele>74.000</ele>
-    <time>2005-06-11T00:43:01.893Z</time>
-    <name>WP0086</name>
-    <cmt>WP0086</cmt>
-    <desc>WP0086</desc>
-    <fix>2d</fix>
-    <sat>3</sat>
-    <pdop>40.599998</pdop>
-  </wpt>
-  <wpt lat="45.495899984" lon="-75.735658307">
-    <ele>74.700</ele>
-    <time>2005-06-11T00:43:09.893Z</time>
-    <name>WP0087</name>
-    <cmt>WP0087</cmt>
-    <desc>WP0087</desc>
-    <fix>3d</fix>
-    <sat>4</sat>
-    <pdop>2.000000</pdop>
-  </wpt>
-  <wpt lat="45.495808318" lon="-75.735613307">
-    <ele>72.300</ele>
-    <time>2005-06-11T00:43:38.891Z</time>
-    <name>WP0088</name>
-    <cmt>WP0088</cmt>
-    <desc>WP0088</desc>
-  </wpt>
-  <wpt lat="45.495711651" lon="-75.735599974">
-    <ele>72.200</ele>
-    <time>2005-06-11T00:44:05.889Z</time>
-    <name>WP0089</name>
-    <cmt>WP0089</cmt>
-    <desc>WP0089</desc>
-  </wpt>
-  <wpt lat="45.495679984" lon="-75.735724974">
-    <ele>73.000</ele>
-    <time>2005-06-11T00:44:11.888Z</time>
-    <name>WP0090</name>
-    <cmt>WP0090</cmt>
-    <desc>WP0090</desc>
-    <fix>2d</fix>
-    <sat>3</sat>
-    <pdop>38.200001</pdop>
-  </wpt>
-  <wpt lat="45.495651651" lon="-75.735859974">
-    <ele>74.400</ele>
-    <time>2005-06-11T00:44:23.888Z</time>
-    <name>WP0091</name>
-    <cmt>WP0091</cmt>
-    <desc>WP0091</desc>
-    <sat>2</sat>
-  </wpt>
-  <wpt lat="45.495756651" lon="-75.735824974">
-    <ele>81.200</ele>
-    <time>2005-06-11T00:44:43.886Z</time>
-    <name>WP0092</name>
-    <cmt>WP0092</cmt>
-    <desc>WP0092</desc>
-    <fix>2d</fix>
-    <sat>3</sat>
-    <pdop>37.200001</pdop>
-  </wpt>
-  <wpt lat="45.495728318" lon="-75.735801640">
-    <ele>70.100</ele>
-    <time>2005-06-11T00:44:47.886Z</time>
-    <name>WP0093</name>
-    <cmt>WP0093</cmt>
-    <desc>WP0093</desc>
-    <fix>3d</fix>
-    <sat>4</sat>
-    <pdop>9.400000</pdop>
-  </wpt>
-  <wpt lat="45.495708318" lon="-75.735911640">
-    <ele>64.400</ele>
-    <time>2005-06-11T00:45:02.885Z</time>
-    <name>WP0094</name>
-    <cmt>WP0094</cmt>
-    <desc>WP0094</desc>
-    <sat>2</sat>
-  </wpt>
-  <wpt lat="45.495683318" lon="-75.736064974">
-    <ele>64.000</ele>
-    <time>2005-06-11T00:45:35.883Z</time>
-    <name>WP0095</name>
-    <cmt>WP0095</cmt>
-    <desc>WP0095</desc>
-    <sat>1</sat>
-  </wpt>
-  <wpt lat="45.495584984" lon="-75.736138307">
-    <ele>64.600</ele>
-    <time>2005-06-11T00:46:07.881Z</time>
-    <name>WP0096</name>
-    <cmt>WP0096</cmt>
-    <desc>WP0096</desc>
-    <fix>2d</fix>
-    <sat>3</sat>
-    <pdop>23.000000</pdop>
-  </wpt>
-  <wpt lat="45.495651651" lon="-75.736043307">
-    <ele>67.300</ele>
-    <time>2005-06-11T00:46:36.879Z</time>
-    <name>WP0097</name>
-    <cmt>WP0097</cmt>
-    <desc>WP0097</desc>
-    <fix>2d</fix>
-    <sat>3</sat>
-    <pdop>5.200000</pdop>
-  </wpt>
-  <wpt lat="45.495691651" lon="-75.735939974">
-    <ele>71.400</ele>
-    <time>2005-06-11T00:48:44.870Z</time>
-    <name>WP0098</name>
-    <cmt>WP0098</cmt>
-    <desc>WP0098</desc>
-    <fix>3d</fix>
-    <sat>4</sat>
-    <pdop>43.599998</pdop>
-  </wpt>
-  <wpt lat="45.495706651" lon="-75.736066640">
-    <ele>71.700</ele>
-    <time>2005-06-11T00:49:14.868Z</time>
-    <name>WP0099</name>
-    <cmt>WP0099</cmt>
-    <desc>WP0099</desc>
-    <fix>2d</fix>
-    <sat>3</sat>
-    <pdop>24.200001</pdop>
-  </wpt>
-  <wpt lat="45.495733318" lon="-75.735924974">
-    <ele>72.300</ele>
-    <time>2005-06-11T00:51:19.860Z</time>
-    <name>WP0100</name>
-    <cmt>WP0100</cmt>
-    <desc>WP0100</desc>
-    <fix>3d</fix>
-    <sat>4</sat>
-    <pdop>2.200000</pdop>
-  </wpt>
-  <wpt lat="45.495666651" lon="-75.735996640">
-    <ele>81.200</ele>
-    <time>2005-06-11T00:51:31.859Z</time>
-    <name>WP0101</name>
-    <cmt>WP0101</cmt>
-    <desc>WP0101</desc>
-    <fix>2d</fix>
-    <sat>3</sat>
-    <pdop>36.400002</pdop>
-  </wpt>
-  <wpt lat="45.495646651" lon="-75.735903307">
-    <ele>74.500</ele>
-    <time>2005-06-11T00:51:43.858Z</time>
-    <name>WP0102</name>
-    <cmt>WP0102</cmt>
-    <desc>WP0102</desc>
-    <sat>2</sat>
-  </wpt>
-  <wpt lat="45.495689984" lon="-75.735704974">
-    <ele>74.700</ele>
-    <time>2005-06-11T00:51:53.858Z</time>
-    <name>WP0103</name>
-    <cmt>WP0103</cmt>
-    <desc>WP0103</desc>
-    <fix>2d</fix>
-    <sat>3</sat>
-    <pdop>13.600000</pdop>
-  </wpt>
-  <wpt lat="45.495769984" lon="-75.735519974">
-    <ele>76.200</ele>
-    <time>2005-06-11T00:52:08.857Z</time>
-    <name>WP0104</name>
-    <cmt>WP0104</cmt>
-    <desc>WP0104</desc>
-    <fix>2d</fix>
-    <sat>3</sat>
-    <pdop>50.000000</pdop>
-  </wpt>
-  <wpt lat="45.495858318" lon="-75.735479974">
-    <ele>77.900</ele>
-    <time>2005-06-11T00:52:19.856Z</time>
-    <name>WP0105</name>
-    <cmt>WP0105</cmt>
-    <desc>WP0105</desc>
-    <fix>2d</fix>
-    <sat>3</sat>
-    <pdop>26.400000</pdop>
-  </wpt>
-  <wpt lat="45.495914984" lon="-75.735378307">
-    <ele>78.600</ele>
-    <time>2005-06-11T00:52:27.856Z</time>
-    <name>WP0106</name>
-    <cmt>WP0106</cmt>
-    <desc>WP0106</desc>
-    <fix>3d</fix>
-    <sat>4</sat>
-    <pdop>50.000000</pdop>
-  </wpt>
-  <wpt lat="45.495991651" lon="-75.735234974">
-    <ele>80.700</ele>
-    <time>2005-06-11T00:52:37.855Z</time>
-    <name>WP0107</name>
-    <cmt>WP0107</cmt>
-    <desc>WP0107</desc>
-    <fix>dgps</fix>
-    <sat>5</sat>
-    <pdop>1.600000</pdop>
-  </wpt>
-  <wpt lat="45.496076651" lon="-75.735043307">
-    <ele>84.400</ele>
-    <time>2005-06-11T00:52:54.854Z</time>
-    <name>WP0108</name>
-    <cmt>WP0108</cmt>
-    <desc>WP0108</desc>
-    <sat>2</sat>
-  </wpt>
-  <wpt lat="45.496214984" lon="-75.734634974">
-    <ele>92.600</ele>
-    <time>2005-06-11T00:53:33.851Z</time>
-    <name>WP0109</name>
-    <cmt>WP0109</cmt>
-    <desc>WP0109</desc>
-    <fix>dgps</fix>
-    <sat>5</sat>
-    <pdop>2.000000</pdop>
-  </wpt>
-  <wpt lat="45.496243318" lon="-75.734476640">
-    <ele>95.800</ele>
-    <time>2005-06-11T00:53:43.850Z</time>
-    <name>WP0110</name>
-    <cmt>WP0110</cmt>
-    <desc>WP0110</desc>
-    <fix>3d</fix>
-    <sat>4</sat>
-    <pdop>5.000000</pdop>
-  </wpt>
-  <wpt lat="45.496326651" lon="-75.734336640">
-    <ele>94.700</ele>
-    <time>2005-06-11T00:53:53.850Z</time>
-    <name>WP0111</name>
-    <cmt>WP0111</cmt>
-    <desc>WP0111</desc>
-    <fix>dgps</fix>
-    <sat>7</sat>
-    <pdop>0.800000</pdop>
-  </wpt>
-  <wpt lat="45.496198318" lon="-75.734216640">
-    <ele>59.200</ele>
-    <time>2005-06-11T14:39:26.882Z</time>
-    <name>WP0112</name>
-    <cmt>WP0112</cmt>
-    <desc>WP0112</desc>
-    <fix>3d</fix>
-    <sat>4</sat>
-    <pdop>9.400000</pdop>
-  </wpt>
-  <wpt lat="45.496179984" lon="-75.734338307">
-    <ele>55.200</ele>
-    <time>2005-06-12T14:39:42.881Z</time>
-    <name>WP0113</name>
-    <cmt>WP0113</cmt>
-    <desc>WP0113</desc>
-    <fix>2d</fix>
-    <sat>3</sat>
-    <pdop>6.000000</pdop>
-  </wpt>
-  <wpt lat="45.496081651" lon="-75.734656640">
-    <ele>56.100</ele>
-    <time>2005-06-12T14:40:08.879Z</time>
-    <name>WP0114</name>
-    <cmt>WP0114</cmt>
-    <desc>WP0114</desc>
-    <fix>2d</fix>
-    <sat>3</sat>
-    <pdop>7.600000</pdop>
-  </wpt>
-  <wpt lat="45.495996651" lon="-75.734781640">
-    <ele>54.500</ele>
-    <time>2005-06-12T14:40:16.878Z</time>
-    <name>WP0115</name>
-    <cmt>WP0115</cmt>
-    <desc>WP0115</desc>
-    <fix>3d</fix>
-    <sat>4</sat>
-    <pdop>11.800000</pdop>
-  </wpt>
-  <wpt lat="45.495906651" lon="-75.734983307">
-    <ele>48.700</ele>
-    <time>2005-06-12T14:40:33.877Z</time>
-    <name>WP0116</name>
-    <cmt>WP0116</cmt>
-    <desc>WP0116</desc>
-    <sat>2</sat>
-  </wpt>
-  <wpt lat="45.495801651" lon="-75.735363307">
-    <ele>43.700</ele>
-    <time>2005-06-12T14:41:02.875Z</time>
-    <name>WP0117</name>
-    <cmt>WP0117</cmt>
-    <desc>WP0117</desc>
-    <fix>2d</fix>
-    <sat>3</sat>
-    <pdop>7.200000</pdop>
-  </wpt>
-  <wpt lat="45.495801651" lon="-75.735514974">
-    <ele>45.100</ele>
-    <time>2005-06-12T14:41:16.874Z</time>
-    <name>WP0118</name>
-    <cmt>WP0118</cmt>
-    <desc>WP0118</desc>
-    <sat>2</sat>
-  </wpt>
-  <wpt lat="45.495833318" lon="-75.735654974">
-    <ele>44.600</ele>
-    <time>2005-06-12T14:41:24.874Z</time>
-    <name>WP0119</name>
-    <cmt>WP0119</cmt>
-    <desc>WP0119</desc>
-    <fix>3d</fix>
-    <sat>4</sat>
-    <pdop>16.600000</pdop>
-  </wpt>
-  <wpt lat="45.495914984" lon="-75.735726640">
-    <ele>44.100</ele>
-    <time>2005-06-12T14:41:31.873Z</time>
-    <name>WP0120</name>
-    <cmt>WP0120</cmt>
-    <desc>WP0120</desc>
-    <sat>2</sat>
-  </wpt>
-  <wpt lat="45.495956651" lon="-75.735839974">
-    <ele>43.000</ele>
-    <time>2005-06-12T14:41:40.873Z</time>
-    <name>WP0121</name>
-    <cmt>WP0121</cmt>
-    <desc>WP0121</desc>
-    <sat>2</sat>
-  </wpt>
-  <wpt lat="45.496036651" lon="-75.735908307">
-    <ele>42.000</ele>
-    <time>2005-06-12T14:41:48.872Z</time>
-    <name>WP0122</name>
-    <cmt>WP0122</cmt>
-    <desc>WP0122</desc>
-    <fix>2d</fix>
-    <sat>3</sat>
-    <pdop>7.200000</pdop>
-  </wpt>
-  <wpt lat="45.496151651" lon="-75.735971640">
-    <ele>41.400</ele>
-    <time>2005-06-12T14:41:55.872Z</time>
-    <name>WP0123</name>
-    <cmt>WP0123</cmt>
-    <desc>WP0123</desc>
-    <fix>2d</fix>
-    <sat>3</sat>
-    <pdop>6.800000</pdop>
-  </wpt>
-  <wpt lat="45.496328318" lon="-75.735998307">
-    <ele>41.600</ele>
-    <time>2005-06-12T14:42:05.871Z</time>
-    <name>WP0124</name>
-    <cmt>WP0124</cmt>
-    <desc>WP0124</desc>
-    <fix>2d</fix>
-    <sat>3</sat>
-    <pdop>6.800000</pdop>
-  </wpt>
-  <wpt lat="45.496431651" lon="-75.735963307">
-    <ele>41.600</ele>
-    <time>2005-06-12T14:42:14.871Z</time>
-    <name>WP0125</name>
-    <cmt>WP0125</cmt>
-    <desc>WP0125</desc>
-    <sat>1</sat>
-  </wpt>
-  <wpt lat="45.496608318" lon="-75.735874974">
-    <ele>41.600</ele>
-    <time>2005-06-12T14:42:31.870Z</time>
-    <name>WP0126</name>
-    <cmt>WP0126</cmt>
-    <desc>WP0126</desc>
-    <fix>2d</fix>
-    <sat>3</sat>
-    <pdop>7.000000</pdop>
-  </wpt>
-  <wpt lat="45.496763318" lon="-75.735828307">
-    <ele>41.600</ele>
-    <time>2005-06-12T14:42:44.869Z</time>
-    <name>WP0127</name>
-    <cmt>WP0127</cmt>
-    <desc>WP0127</desc>
-    <sat>2</sat>
-  </wpt>
-  <wpt lat="45.496854984" lon="-75.735886640">
-    <ele>41.600</ele>
-    <time>2005-06-12T14:42:50.868Z</time>
-    <name>WP0128</name>
-    <cmt>WP0128</cmt>
-    <desc>WP0128</desc>
-    <sat>2</sat>
-  </wpt>
-  <wpt lat="45.496996651" lon="-75.735931640">
-    <ele>41.600</ele>
-    <time>2005-06-12T14:43:03.867Z</time>
-    <name>WP0129</name>
-    <cmt>WP0129</cmt>
-    <desc>WP0129</desc>
-    <sat>2</sat>
-  </wpt>
-  <wpt lat="45.497081651" lon="-75.735889974">
-    <ele>41.600</ele>
-    <time>2005-06-12T14:43:06.867Z</time>
-    <name>WP0130</name>
-    <cmt>WP0130</cmt>
-    <desc>WP0130</desc>
-    <sat>2</sat>
-  </wpt>
-  <wpt lat="45.497164984" lon="-75.735838307">
-    <ele>41.600</ele>
-    <time>2005-06-12T14:43:15.867Z</time>
-    <name>WP0131</name>
-    <cmt>WP0131</cmt>
-    <desc>WP0131</desc>
-    <sat>1</sat>
-  </wpt>
-  <wpt lat="45.497229984" lon="-75.735719974">
-    <ele>41.600</ele>
-    <time>2005-06-12T14:43:24.866Z</time>
-    <name>WP0132</name>
-    <cmt>WP0132</cmt>
-    <desc>WP0132</desc>
-    <fix>2d</fix>
-    <sat>3</sat>
-    <pdop>7.400000</pdop>
-  </wpt>
-  <wpt lat="45.497303318" lon="-75.735568307">
-    <ele>41.700</ele>
-    <time>2005-06-12T14:43:34.865Z</time>
-    <name>WP0133</name>
-    <cmt>WP0133</cmt>
-    <desc>WP0133</desc>
-    <fix>3d</fix>
-    <sat>4</sat>
-    <pdop>33.799999</pdop>
-  </wpt>
-  <wpt lat="45.497301651" lon="-75.735439974">
-    <ele>41.700</ele>
-    <time>2005-06-12T14:43:41.865Z</time>
-    <name>WP0134</name>
-    <cmt>WP0134</cmt>
-    <desc>WP0134</desc>
-    <fix>2d</fix>
-    <sat>3</sat>
-    <pdop>6.800000</pdop>
-  </wpt>
-  <wpt lat="45.497318318" lon="-75.735193307">
-    <ele>41.800</ele>
-    <time>2005-06-12T14:43:54.864Z</time>
-    <name>WP0135</name>
-    <cmt>WP0135</cmt>
-    <desc>WP0135</desc>
-    <sat>2</sat>
-  </wpt>
-  <wpt lat="45.497329984" lon="-75.734973307">
-    <ele>42.300</ele>
-    <time>2005-06-12T14:44:06.863Z</time>
-    <name>WP0136</name>
-    <cmt>WP0136</cmt>
-    <desc>WP0136</desc>
-    <fix>3d</fix>
-    <sat>4</sat>
-    <pdop>21.799999</pdop>
-  </wpt>
-  <wpt lat="45.497464984" lon="-75.733798307">
-    <ele>45.200</ele>
-    <time>2005-06-12T14:44:53.860Z</time>
-    <name>WP0137</name>
-    <cmt>WP0137</cmt>
-    <desc>WP0137</desc>
-    <fix>2d</fix>
-    <sat>3</sat>
-    <pdop>7.000000</pdop>
-  </wpt>
-  <wpt lat="45.497519984" lon="-75.733038307">
-    <ele>46.700</ele>
-    <time>2005-06-12T14:45:30.858Z</time>
-    <name>WP0138</name>
-    <cmt>WP0138</cmt>
-    <desc>WP0138</desc>
-    <fix>2d</fix>
-    <sat>3</sat>
-    <pdop>8.400000</pdop>
-  </wpt>
-  <wpt lat="45.497474984" lon="-75.732808307">
-    <ele>47.400</ele>
-    <time>2005-06-12T14:45:44.857Z</time>
-    <name>WP0139</name>
-    <cmt>WP0139</cmt>
-    <desc>WP0139</desc>
-    <fix>2d</fix>
-    <sat>3</sat>
-    <pdop>8.600000</pdop>
-  </wpt>
-  <wpt lat="45.497466651" lon="-75.732938307">
-    <ele>48.300</ele>
-    <time>2005-06-12T14:45:55.856Z</time>
-    <name>WP0140</name>
-    <cmt>WP0140</cmt>
-    <desc>WP0140</desc>
-    <sat>2</sat>
-  </wpt>
-  <wpt lat="45.497506651" lon="-75.733146640">
-    <ele>49.000</ele>
-    <time>2005-06-12T14:46:07.855Z</time>
-    <name>WP0141</name>
-    <cmt>WP0141</cmt>
-    <desc>WP0141</desc>
-  </wpt>
-  <wpt lat="45.497499984" lon="-75.733361640">
-    <ele>49.400</ele>
-    <time>2005-06-12T14:46:22.854Z</time>
-    <name>WP0142</name>
-    <cmt>WP0142</cmt>
-    <desc>WP0142</desc>
-    <sat>2</sat>
-  </wpt>
-  <wpt lat="45.497463318" lon="-75.733511640">
-    <ele>49.900</ele>
-    <time>2005-06-12T14:46:37.853Z</time>
-    <name>WP0143</name>
-    <cmt>WP0143</cmt>
-    <desc>WP0143</desc>
-    <fix>3d</fix>
-    <sat>4</sat>
-    <pdop>8.200000</pdop>
-  </wpt>
-  <wpt lat="45.497483318" lon="-75.733636640">
-    <ele>49.500</ele>
-    <time>2005-06-12T14:47:06.852Z</time>
-    <name>WP0144</name>
-    <cmt>WP0144</cmt>
-    <desc>WP0144</desc>
-    <fix>2d</fix>
-    <sat>3</sat>
-    <pdop>6.400000</pdop>
-  </wpt>
-  <wpt lat="45.497466651" lon="-75.733898307">
-    <ele>55.000</ele>
-    <time>2005-06-12T14:47:31.850Z</time>
-    <name>WP0145</name>
-    <cmt>WP0145</cmt>
-    <desc>WP0145</desc>
-    <fix>2d</fix>
-    <sat>3</sat>
-    <pdop>9.400000</pdop>
-  </wpt>
-  <wpt lat="45.497471651" lon="-75.734046640">
-    <ele>56.600</ele>
-    <time>2005-06-12T14:47:40.849Z</time>
-    <name>WP0146</name>
-    <cmt>WP0146</cmt>
-    <desc>WP0146</desc>
-    <fix>2d</fix>
-    <sat>3</sat>
-    <pdop>5.400000</pdop>
-  </wpt>
-  <wpt lat="45.497383318" lon="-75.734076640">
-    <ele>56.100</ele>
-    <time>2005-06-12T14:48:17.847Z</time>
-    <name>WP0147</name>
-    <cmt>WP0147</cmt>
-    <desc>WP0147</desc>
-    <fix>2d</fix>
-    <sat>3</sat>
-    <pdop>10.000000</pdop>
-  </wpt>
-  <wpt lat="45.497269984" lon="-75.734148307">
-    <ele>56.700</ele>
-    <time>2005-06-12T14:48:37.846Z</time>
-    <name>WP0148</name>
-    <cmt>WP0148</cmt>
-    <desc>WP0148</desc>
-    <sat>2</sat>
-  </wpt>
-  <wpt lat="45.497241651" lon="-75.734263307">
-    <ele>70.600</ele>
-    <time>2005-06-12T14:49:04.844Z</time>
-    <name>WP0149</name>
-    <cmt>WP0149</cmt>
-    <desc>WP0149</desc>
-    <fix>3d</fix>
-    <sat>4</sat>
-    <pdop>5.200000</pdop>
-  </wpt>
-  <wpt lat="45.497159984" lon="-75.734243307">
-    <ele>75.600</ele>
-    <time>2005-06-12T14:49:14.843Z</time>
-    <name>WP0150</name>
-    <cmt>WP0150</cmt>
-    <desc>WP0150</desc>
-    <fix>3d</fix>
-    <sat>4</sat>
-    <pdop>5.000000</pdop>
-  </wpt>
-  <wpt lat="45.497066651" lon="-75.734216640">
-    <ele>76.100</ele>
-    <time>2005-06-12T14:49:29.842Z</time>
-    <name>WP0151</name>
-    <cmt>WP0151</cmt>
-    <desc>WP0151</desc>
-    <fix>2d</fix>
-    <sat>3</sat>
-    <pdop>10.600000</pdop>
-  </wpt>
-  <wpt lat="45.496981651" lon="-75.734176640">
-    <ele>77.400</ele>
-    <time>2005-06-12T14:49:49.841Z</time>
-    <name>WP0152</name>
-    <cmt>WP0152</cmt>
-    <desc>WP0152</desc>
-    <fix>2d</fix>
-    <sat>3</sat>
-    <pdop>6.400000</pdop>
-  </wpt>
-  <wpt lat="45.497001651" lon="-75.734269974">
-    <ele>84.500</ele>
-    <time>2005-06-12T14:50:10.839Z</time>
-    <name>WP0153</name>
-    <cmt>WP0153</cmt>
-    <desc>WP0153</desc>
-    <sat>1</sat>
-  </wpt>
-  <wpt lat="45.497056651" lon="-75.734181640">
-    <ele>90.200</ele>
-    <time>2005-06-12T14:50:25.839Z</time>
-    <name>WP0154</name>
-    <cmt>WP0154</cmt>
-    <desc>WP0154</desc>
-    <sat>2</sat>
-  </wpt>
-  <wpt lat="45.497098318" lon="-75.734301640">
-    <ele>93.200</ele>
-    <time>2005-06-12T14:50:45.837Z</time>
-    <name>WP0155</name>
-    <cmt>WP0155</cmt>
-    <desc>WP0155</desc>
-    <sat>2</sat>
-  </wpt>
-  <wpt lat="45.497131651" lon="-75.734461640">
-    <ele>94.400</ele>
-    <time>2005-06-12T14:50:55.837Z</time>
-    <name>WP0156</name>
-    <cmt>WP0156</cmt>
-    <desc>WP0156</desc>
-    <fix>2d</fix>
-    <sat>3</sat>
-    <pdop>6.400000</pdop>
-  </wpt>
-  <wpt lat="45.497083318" lon="-75.734576640">
-    <ele>95.400</ele>
-    <time>2005-06-12T14:51:04.836Z</time>
-    <name>WP0157</name>
-    <cmt>WP0157</cmt>
-    <desc>WP0157</desc>
-    <sat>2</sat>
-  </wpt>
-  <wpt lat="45.497011651" lon="-75.734718307">
-    <ele>96.500</ele>
-    <time>2005-06-12T14:51:16.835Z</time>
-    <name>WP0158</name>
-    <cmt>WP0158</cmt>
-    <desc>WP0158</desc>
-    <fix>2d</fix>
-    <sat>3</sat>
-    <pdop>6.200000</pdop>
-  </wpt>
-  <wpt lat="45.497041651" lon="-75.734841640">
-    <ele>96.300</ele>
-    <time>2005-06-12T14:51:38.834Z</time>
-    <name>WP0159</name>
-    <cmt>WP0159</cmt>
-    <desc>WP0159</desc>
-    <sat>2</sat>
-  </wpt>
-  <wpt lat="45.496978318" lon="-75.734936640">
-    <ele>97.000</ele>
-    <time>2005-06-12T14:51:47.833Z</time>
-    <name>WP0160</name>
-    <cmt>WP0160</cmt>
-    <desc>WP0160</desc>
-    <fix>2d</fix>
-    <sat>3</sat>
-    <pdop>6.200000</pdop>
-  </wpt>
-  <wpt lat="45.496954984" lon="-75.735069974">
-    <ele>96.900</ele>
-    <time>2005-06-12T14:51:57.832Z</time>
-    <name>WP0161</name>
-    <cmt>WP0161</cmt>
-    <desc>WP0161</desc>
-    <sat>2</sat>
-  </wpt>
-  <wpt lat="45.496956651" lon="-75.735244974">
-    <ele>98.200</ele>
-    <time>2005-06-12T14:52:10.832Z</time>
-    <name>WP0162</name>
-    <cmt>WP0162</cmt>
-    <desc>WP0162</desc>
-    <fix>2d</fix>
-    <sat>3</sat>
-    <pdop>6.200000</pdop>
-  </wpt>
-  <wpt lat="45.496894984" lon="-75.735343307">
-    <ele>98.600</ele>
-    <time>2005-06-12T14:52:24.831Z</time>
-    <name>WP0163</name>
-    <cmt>WP0163</cmt>
-    <desc>WP0163</desc>
-    <fix>2d</fix>
-    <sat>3</sat>
-    <pdop>6.200000</pdop>
-  </wpt>
-  <wpt lat="45.496828318" lon="-75.735484974">
-    <ele>98.400</ele>
-    <time>2005-06-12T14:52:38.830Z</time>
-    <name>WP0164</name>
-    <cmt>WP0164</cmt>
-    <desc>WP0164</desc>
-    <sat>2</sat>
-  </wpt>
-  <wpt lat="45.496764984" lon="-75.735634974">
-    <ele>98.200</ele>
-    <time>2005-06-12T14:52:51.829Z</time>
-    <name>WP0165</name>
-    <cmt>WP0165</cmt>
-    <desc>WP0165</desc>
-    <fix>2d</fix>
-    <sat>3</sat>
-    <pdop>6.200000</pdop>
-  </wpt>
-  <wpt lat="45.496698318" lon="-75.735818307">
-    <ele>97.000</ele>
-    <time>2005-06-12T14:53:04.828Z</time>
-    <name>WP0166</name>
-    <cmt>WP0166</cmt>
-    <desc>WP0166</desc>
-    <fix>2d</fix>
-    <sat>3</sat>
-    <pdop>6.200000</pdop>
-  </wpt>
-  <wpt lat="45.496658318" lon="-75.735986640">
-    <ele>96.600</ele>
-    <time>2005-06-12T14:53:12.828Z</time>
-    <name>WP0167</name>
-    <cmt>WP0167</cmt>
-    <desc>WP0167</desc>
-    <fix>2d</fix>
-    <sat>3</sat>
-    <pdop>13.400000</pdop>
-  </wpt>
-  <wpt lat="45.496573318" lon="-75.736061640">
-    <ele>96.100</ele>
-    <time>2005-06-12T14:53:17.827Z</time>
-    <name>WP0168</name>
-    <cmt>WP0168</cmt>
-    <desc>WP0168</desc>
-    <fix>3d</fix>
-    <sat>4</sat>
-    <pdop>3.200000</pdop>
-  </wpt>
-  <wpt lat="45.496441651" lon="-75.736114974">
-    <ele>94.800</ele>
-    <time>2005-06-12T14:53:25.827Z</time>
-    <name>WP0169</name>
-    <cmt>WP0169</cmt>
-    <desc>WP0169</desc>
-    <fix>2d</fix>
-    <sat>3</sat>
-    <pdop>13.400000</pdop>
-  </wpt>
-  <wpt lat="45.496343318" lon="-75.736063307">
-    <ele>95.200</ele>
-    <time>2005-06-12T14:53:30.826Z</time>
-    <name>WP0170</name>
-    <cmt>WP0170</cmt>
-    <desc>WP0170</desc>
-    <fix>2d</fix>
-    <sat>3</sat>
-    <pdop>13.600000</pdop>
-  </wpt>
-  <wpt lat="45.495934984" lon="-75.735669974">
-    <ele>93.600</ele>
-    <time>2005-06-12T14:53:51.825Z</time>
-    <name>WP0171</name>
-    <cmt>WP0171</cmt>
-    <desc>WP0171</desc>
-    <fix>2d</fix>
-    <sat>3</sat>
-    <pdop>8.800000</pdop>
-  </wpt>
-  <wpt lat="45.495949984" lon="-75.735524974">
-    <ele>92.400</ele>
-    <time>2005-06-12T14:53:56.825Z</time>
-    <name>WP0172</name>
-    <cmt>WP0172</cmt>
-    <desc>WP0172</desc>
-    <fix>3d</fix>
-    <sat>4</sat>
-    <pdop>3.000000</pdop>
-  </wpt>
-  <wpt lat="45.495986651" lon="-75.735344974">
-    <ele>91.200</ele>
-    <time>2005-06-12T14:54:07.824Z</time>
-    <name>WP0173</name>
-    <cmt>WP0173</cmt>
-    <desc>WP0173</desc>
-    <fix>3d</fix>
-    <sat>4</sat>
-    <pdop>3.000000</pdop>
-  </wpt>
-  <wpt lat="45.496024984" lon="-75.735221640">
-    <ele>92.400</ele>
-    <time>2005-06-12T14:54:19.823Z</time>
-    <name>WP0174</name>
-    <cmt>WP0174</cmt>
-    <desc>WP0174</desc>
-    <fix>2d</fix>
-    <sat>3</sat>
-    <pdop>6.200000</pdop>
-  </wpt>
-  <wpt lat="45.496096651" lon="-75.734986640">
-    <ele>94.400</ele>
-    <time>2005-06-12T14:54:46.821Z</time>
-    <name>WP0175</name>
-    <cmt>WP0175</cmt>
-    <desc>WP0175</desc>
-    <fix>3d</fix>
-    <sat>4</sat>
-    <pdop>2.800000</pdop>
-  </wpt>
-  <wpt lat="45.496131651" lon="-75.734836640">
-    <ele>92.800</ele>
-    <time>2005-06-12T14:55:02.820Z</time>
-    <name>WP0176</name>
-    <cmt>WP0176</cmt>
-    <desc>WP0176</desc>
-    <fix>3d</fix>
-    <sat>4</sat>
-    <pdop>2.800000</pdop>
-  </wpt>
-  <wpt lat="45.496186651" lon="-75.734716640">
-    <ele>94.900</ele>
-    <time>2005-06-12T14:55:11.820Z</time>
-    <name>WP0177</name>
-    <cmt>WP0177</cmt>
-    <desc>WP0177</desc>
-    <fix>2d</fix>
-    <sat>3</sat>
-    <pdop>9.000000</pdop>
-  </wpt>
-  <wpt lat="45.496241651" lon="-75.734586640">
-    <ele>95.600</ele>
-    <time>2005-06-12T14:55:21.819Z</time>
-    <name>WP0178</name>
-    <cmt>WP0178</cmt>
-    <desc>WP0178</desc>
-    <fix>3d</fix>
-    <sat>4</sat>
-    <pdop>2.800000</pdop>
-  </wpt>
-  <wpt lat="45.496301651" lon="-75.734363307">
-    <ele>96.300</ele>
-    <time>2005-06-12T14:55:43.818Z</time>
-    <name>WP0179</name>
-    <cmt>WP0179</cmt>
-    <desc>WP0179</desc>
-    <fix>2d</fix>
-    <sat>3</sat>
-    <pdop>9.200000</pdop>
-  </wpt>
-  <wpt lat="45.496216651" lon="-75.734409974">
-    <ele>96.300</ele>
-    <time>2005-06-12T14:56:17.815Z</time>
-    <name>WP0180</name>
-    <cmt>WP0180</cmt>
-    <desc>WP0180</desc>
-    <sat>1</sat>
-  </wpt>
-  <wpt lat="45.496306651" lon="-75.734371640">
-    <ele>98.800</ele>
-    <time>2005-06-12T14:56:27.815Z</time>
-    <name>WP0181</name>
-    <cmt>WP0181</cmt>
-    <desc>WP0181</desc>
-    <fix>3d</fix>
-    <sat>4</sat>
-    <pdop>2.600000</pdop>
-  </wpt>
-  <wpt lat="45.496194984" lon="-75.734224974">
-    <ele>97.900</ele>
-    <time>2005-06-12T14:57:10.812Z</time>
-    <name>WP0182</name>
-    <cmt>WP0182</cmt>
-    <desc>WP0182</desc>
-    <fix>2d</fix>
-    <sat>3</sat>
-    <pdop>9.600000</pdop>
-  </wpt>
-  <wpt lat="45.495998318" lon="-75.734101640">
-    <ele>97.600</ele>
-    <time>2005-06-12T14:57:13.812Z</time>
-    <name>WP0183</name>
-    <cmt>WP0183</cmt>
-    <desc>WP0183</desc>
-    <sat>1</sat>
-  </wpt>
-  <wpt lat="45.494281651" lon="-75.733509974">
-    <ele>97.300</ele>
-    <time>2005-06-12T14:57:44.810Z</time>
-    <name>WP0184</name>
-    <cmt>WP0184</cmt>
-    <desc>WP0184</desc>
-  </wpt>
-  <wpt lat="45.491526651" lon="-75.730496640">
-    <ele>97.500</ele>
-    <time>2005-06-12T14:58:20.807Z</time>
-    <name>WP0185</name>
-    <cmt>WP0185</cmt>
-    <desc>WP0185</desc>
-    <sat>2</sat>
-  </wpt>
-  <wpt lat="45.490809984" lon="-75.728584974">
-    <ele>97.700</ele>
-    <time>2005-06-12T14:58:21.807Z</time>
-    <name>WP0186</name>
-    <cmt>WP0186</cmt>
-    <desc>WP0186</desc>
-    <sat>2</sat>
-  </wpt>
-  <wpt lat="45.489388318" lon="-75.725018307">
-    <ele>98.100</ele>
-    <time>2005-06-12T14:58:24.807Z</time>
-    <name>WP0187</name>
-    <cmt>WP0187</cmt>
-    <desc>WP0187</desc>
-    <sat>2</sat>
-  </wpt>
-  <wpt lat="45.488314984" lon="-75.722894974">
-    <ele>98.200</ele>
-    <time>2005-06-12T14:58:28.807Z</time>
-    <name>WP0188</name>
-    <cmt>WP0188</cmt>
-    <desc>WP0188</desc>
-    <sat>2</sat>
-  </wpt>
-  <wpt lat="45.487204984" lon="-75.721489974">
-    <ele>98.200</ele>
-    <time>2005-06-12T14:58:34.807Z</time>
-    <name>WP0189</name>
-    <cmt>WP0189</cmt>
-    <desc>WP0189</desc>
-  </wpt>
-  <wpt lat="45.487416651" lon="-75.720791640">
-    <ele>97.900</ele>
-    <time>2005-06-12T14:58:42.806Z</time>
-    <name>WP0190</name>
-    <cmt>WP0190</cmt>
-    <desc>WP0190</desc>
-    <sat>2</sat>
-  </wpt>
-  <wpt lat="45.488398318" lon="-75.721109974">
-    <ele>97.800</ele>
-    <time>2005-06-12T14:58:43.806Z</time>
-    <name>WP0191</name>
-    <cmt>WP0191</cmt>
-    <desc>WP0191</desc>
-    <sat>1</sat>
-  </wpt>
-  <wpt lat="45.490408318" lon="-75.722254974">
-    <ele>101.300</ele>
-    <time>2005-06-12T14:58:46.806Z</time>
-    <name>WP0192</name>
-    <cmt>WP0192</cmt>
-    <desc>WP0192</desc>
-    <sat>2</sat>
-  </wpt>
-  <wpt lat="45.491743318" lon="-75.723359974">
-    <ele>105.300</ele>
-    <time>2005-06-12T14:58:52.805Z</time>
-    <name>WP0193</name>
-    <cmt>WP0193</cmt>
-    <desc>WP0193</desc>
-    <fix>2d</fix>
-    <sat>3</sat>
-    <pdop>10.000000</pdop>
-  </wpt>
-  <wpt lat="45.491659984" lon="-75.723431640">
-    <ele>105.600</ele>
-    <time>2005-06-12T14:58:54.805Z</time>
-    <name>WP0194</name>
-    <cmt>WP0194</cmt>
-    <desc>WP0194</desc>
-    <sat>2</sat>
-  </wpt>
-  <wpt lat="45.491213318" lon="-75.723554974">
-    <ele>105.700</ele>
-    <time>2005-06-12T14:59:01.805Z</time>
-    <name>WP0195</name>
-    <cmt>WP0195</cmt>
-    <desc>WP0195</desc>
-    <sat>1</sat>
-  </wpt>
-  <wpt lat="45.490278318" lon="-75.723608307">
-    <ele>104.700</ele>
-    <time>2005-06-12T14:59:15.804Z</time>
-    <name>WP0196</name>
-    <cmt>WP0196</cmt>
-    <desc>WP0196</desc>
-    <sat>2</sat>
-  </wpt>
-  <wpt lat="45.490369984" lon="-75.723388307">
-    <ele>103.600</ele>
-    <time>2005-06-12T14:59:17.804Z</time>
-    <name>WP0197</name>
-    <cmt>WP0197</cmt>
-    <desc>WP0197</desc>
-    <sat>2</sat>
-  </wpt>
-  <wpt lat="45.490526651" lon="-75.721809974">
-    <ele>101.300</ele>
-    <time>2005-06-12T14:59:24.803Z</time>
-    <name>WP0198</name>
-    <cmt>WP0198</cmt>
-    <desc>WP0198</desc>
-    <sat>2</sat>
-  </wpt>
-  <wpt lat="45.490071651" lon="-75.720394974">
-    <ele>99.900</ele>
-    <time>2005-06-12T14:59:29.803Z</time>
-    <name>WP0199</name>
-    <cmt>WP0199</cmt>
-    <desc>WP0199</desc>
-    <fix>2d</fix>
-    <sat>3</sat>
-    <pdop>2.600000</pdop>
-  </wpt>
-  <wpt lat="45.488781651" lon="-75.717853307">
-    <ele>98.100</ele>
-    <time>2005-06-12T14:59:40.802Z</time>
-    <name>WP0200</name>
-    <cmt>WP0200</cmt>
-    <desc>WP0200</desc>
-    <sat>1</sat>
-  </wpt>
-  <wpt lat="45.488024984" lon="-75.715301640">
-    <ele>97.900</ele>
-    <time>2005-06-12T14:59:54.801Z</time>
-    <name>WP0201</name>
-    <cmt>WP0201</cmt>
-    <desc>WP0201</desc>
-    <sat>2</sat>
-  </wpt>
-  <wpt lat="45.487381651" lon="-75.712531640">
-    <ele>97.700</ele>
-    <time>2005-06-12T15:00:08.800Z</time>
-    <name>WP0202</name>
-    <cmt>WP0202</cmt>
-    <desc>WP0202</desc>
-    <sat>1</sat>
-  </wpt>
-  <wpt lat="45.487396651" lon="-75.711828307">
-    <ele>97.700</ele>
-    <time>2005-06-12T15:00:12.800Z</time>
-    <name>WP0203</name>
-    <cmt>WP0203</cmt>
-    <desc>WP0203</desc>
-    <sat>2</sat>
-  </wpt>
-  <wpt lat="45.487534984" lon="-75.711744974">
-    <ele>97.700</ele>
-    <time>2005-06-12T15:00:13.800Z</time>
-    <name>WP0204</name>
-    <cmt>WP0204</cmt>
-    <desc>WP0204</desc>
-    <sat>2</sat>
-  </wpt>
-  <wpt lat="45.487728318" lon="-75.711471640">
-    <ele>97.500</ele>
-    <time>2005-06-12T15:00:15.800Z</time>
-    <name>WP0205</name>
-    <cmt>WP0205</cmt>
-    <desc>WP0205</desc>
-    <sat>2</sat>
-  </wpt>
-  <wpt lat="45.487859984" lon="-75.710994974">
-    <ele>97.300</ele>
-    <time>2005-06-12T15:00:17.800Z</time>
-    <name>WP0206</name>
-    <cmt>WP0206</cmt>
-    <desc>WP0206</desc>
-    <sat>2</sat>
-  </wpt>
-  <wpt lat="45.488128318" lon="-75.708784974">
-    <ele>97.100</ele>
-    <time>2005-06-12T15:00:26.799Z</time>
-    <name>WP0207</name>
-    <cmt>WP0207</cmt>
-    <desc>WP0207</desc>
-    <sat>1</sat>
-  </wpt>
-  <wpt lat="45.488351651" lon="-75.705628307">
-    <ele>97.000</ele>
-    <time>2005-06-12T15:00:39.798Z</time>
-    <name>WP0208</name>
-    <cmt>WP0208</cmt>
-    <desc>WP0208</desc>
-    <sat>1</sat>
-  </wpt>
-  <wpt lat="45.488748318" lon="-75.704488307">
-    <ele>97.100</ele>
-    <time>2005-06-12T15:00:43.798Z</time>
-    <name>WP0209</name>
-    <cmt>WP0209</cmt>
-    <desc>WP0209</desc>
-    <fix>2d</fix>
-    <sat>3</sat>
-    <pdop>6.400000</pdop>
-  </wpt>
-  <wpt lat="45.489294984" lon="-75.703023307">
-    <ele>97.200</ele>
-    <time>2005-06-12T15:00:52.798Z</time>
-    <name>WP0210</name>
-    <cmt>WP0210</cmt>
-    <desc>WP0210</desc>
-    <fix>2d</fix>
-    <sat>3</sat>
-    <pdop>6.400000</pdop>
-  </wpt>
-  <wpt lat="45.489278318" lon="-75.703171640">
-    <ele>97.100</ele>
-    <time>2005-06-12T15:00:56.797Z</time>
-    <name>WP0211</name>
-    <cmt>WP0211</cmt>
-    <desc>WP0211</desc>
-    <fix>2d</fix>
-    <sat>3</sat>
-    <pdop>6.400000</pdop>
-  </wpt>
-  <wpt lat="45.489263318" lon="-75.703306640">
-    <ele>96.900</ele>
-    <time>2005-06-12T15:01:14.796Z</time>
-    <name>WP0212</name>
-    <cmt>WP0212</cmt>
-    <desc>WP0212</desc>
-    <sat>1</sat>
-  </wpt>
-  <wpt lat="45.489364984" lon="-75.702803307">
-    <ele>96.900</ele>
-    <time>2005-06-12T15:01:37.795Z</time>
-    <name>WP0213</name>
-    <cmt>WP0213</cmt>
-    <desc>WP0213</desc>
-    <sat>2</sat>
-  </wpt>
-  <wpt lat="45.489553318" lon="-75.700098307">
-    <ele>97.300</ele>
-    <time>2005-06-12T15:01:45.794Z</time>
-    <name>WP0214</name>
-    <cmt>WP0214</cmt>
-    <desc>WP0214</desc>
-  </wpt>
-  <wpt lat="45.489698318" lon="-75.698621640">
-    <ele>97.200</ele>
-    <time>2005-06-12T15:01:59.793Z</time>
-    <name>WP0215</name>
-    <cmt>WP0215</cmt>
-    <desc>WP0215</desc>
-    <fix>2d</fix>
-    <sat>3</sat>
-    <pdop>6.400000</pdop>
-  </wpt>
-  <wpt lat="45.489766651" lon="-75.698538307">
-    <ele>97.200</ele>
-    <time>2005-06-12T15:02:04.793Z</time>
-    <name>WP0216</name>
-    <cmt>WP0216</cmt>
-    <desc>WP0216</desc>
-    <sat>2</sat>
-  </wpt>
-  <wpt lat="45.489761651" lon="-75.698398307">
-    <ele>97.100</ele>
-    <time>2005-06-12T15:02:12.792Z</time>
-    <name>WP0217</name>
-    <cmt>WP0217</cmt>
-    <desc>WP0217</desc>
-    <sat>1</sat>
-  </wpt>
-  <wpt lat="45.489583318" lon="-75.695093307">
-    <ele>97.400</ele>
-    <time>2005-06-12T15:02:28.791Z</time>
-    <name>WP0218</name>
-    <cmt>WP0218</cmt>
-    <desc>WP0218</desc>
-  </wpt>
-  <wpt lat="45.489726651" lon="-75.693488307">
-    <ele>97.500</ele>
-    <time>2005-06-12T15:02:36.791Z</time>
-    <name>WP0219</name>
-    <cmt>WP0219</cmt>
-    <desc>WP0219</desc>
-    <sat>2</sat>
-  </wpt>
-  <wpt lat="45.489909984" lon="-75.693386640">
-    <ele>97.500</ele>
-    <time>2005-06-12T15:02:37.791Z</time>
-    <name>WP0220</name>
-    <cmt>WP0220</cmt>
-    <desc>WP0220</desc>
-    <sat>1</sat>
-  </wpt>
-  <wpt lat="45.490408318" lon="-75.692841640">
-    <ele>97.500</ele>
-    <time>2005-06-12T15:02:41.791Z</time>
-    <name>WP0221</name>
-    <cmt>WP0221</cmt>
-    <desc>WP0221</desc>
-    <sat>1</sat>
-  </wpt>
-  <wpt lat="45.490608318" lon="-75.692348307">
-    <ele>97.400</ele>
-    <time>2005-06-12T15:02:44.790Z</time>
-    <name>WP0222</name>
-    <cmt>WP0222</cmt>
-    <desc>WP0222</desc>
-    <sat>1</sat>
-  </wpt>
-  <wpt lat="45.491079984" lon="-75.690218307">
-    <ele>97.400</ele>
-    <time>2005-06-12T15:02:56.790Z</time>
-    <name>WP0223</name>
-    <cmt>WP0223</cmt>
-    <desc>WP0223</desc>
-  </wpt>
-  <wpt lat="45.491288318" lon="-75.688778307">
-    <ele>97.300</ele>
-    <time>2005-06-12T15:03:04.789Z</time>
-    <name>WP0224</name>
-    <cmt>WP0224</cmt>
-    <desc>WP0224</desc>
-    <sat>2</sat>
-  </wpt>
-  <wpt lat="45.491183318" lon="-75.688611640">
-    <ele>97.300</ele>
-    <time>2005-06-12T15:03:05.789Z</time>
-    <name>WP0225</name>
-    <cmt>WP0225</cmt>
-    <desc>WP0225</desc>
-    <sat>2</sat>
-  </wpt>
-  <wpt lat="45.490993318" lon="-75.688663307">
-    <ele>99.000</ele>
-    <time>2005-06-12T15:03:06.789Z</time>
-    <name>WP0226</name>
-    <cmt>WP0226</cmt>
-    <desc>WP0226</desc>
-    <fix>2d</fix>
-    <sat>3</sat>
-    <pdop>2.000000</pdop>
-  </wpt>
-  <wpt lat="45.489688318" lon="-75.688748307">
-    <ele>99.300</ele>
-    <time>2005-06-12T15:03:16.788Z</time>
-    <name>WP0227</name>
-    <cmt>WP0227</cmt>
-    <desc>WP0227</desc>
-    <sat>2</sat>
-  </wpt>
-  <wpt lat="45.489516651" lon="-75.688719974">
-    <ele>99.200</ele>
-    <time>2005-06-12T15:03:20.788Z</time>
-    <name>WP0228</name>
-    <cmt>WP0228</cmt>
-    <desc>WP0228</desc>
-    <fix>2d</fix>
-    <sat>3</sat>
-    <pdop>2.000000</pdop>
-  </wpt>
-  <wpt lat="45.489606651" lon="-75.688778307">
-    <ele>99.000</ele>
-    <time>2005-06-12T15:03:26.788Z</time>
-    <name>WP0229</name>
-    <cmt>WP0229</cmt>
-    <desc>WP0229</desc>
-    <fix>2d</fix>
-    <sat>3</sat>
-    <pdop>2.000000</pdop>
-  </wpt>
-  <wpt lat="45.489716651" lon="-75.688851640">
-    <ele>98.600</ele>
-    <time>2005-06-12T15:03:53.786Z</time>
-    <name>WP0230</name>
-    <cmt>WP0230</cmt>
-    <desc>WP0230</desc>
-    <fix>2d</fix>
-    <sat>3</sat>
-    <pdop>2.000000</pdop>
-  </wpt>
-  <wpt lat="45.489636651" lon="-75.688773307">
-    <ele>98.300</ele>
-    <time>2005-06-12T15:04:12.785Z</time>
-    <name>WP0231</name>
-    <cmt>WP0231</cmt>
-    <desc>WP0231</desc>
-    <sat>1</sat>
-  </wpt>
-  <wpt lat="45.489688318" lon="-75.688884974">
-    <ele>98.000</ele>
-    <time>2005-06-12T15:04:34.783Z</time>
-    <name>WP0232</name>
-    <cmt>WP0232</cmt>
-    <desc>WP0232</desc>
-    <sat>1</sat>
-  </wpt>
-  <wpt lat="45.489699984" lon="-75.688648307">
-    <ele>98.200</ele>
-    <time>2005-06-12T15:04:37.783Z</time>
-    <name>WP0233</name>
-    <cmt>WP0233</cmt>
-    <desc>WP0233</desc>
-    <sat>1</sat>
-  </wpt>
-  <wpt lat="45.489858318" lon="-75.688149974">
-    <ele>98.400</ele>
-    <time>2005-06-12T15:04:43.783Z</time>
-    <name>WP0234</name>
-    <cmt>WP0234</cmt>
-    <desc>WP0234</desc>
-    <sat>1</sat>
-  </wpt>
-  <wpt lat="45.489979984" lon="-75.687781640">
-    <ele>98.400</ele>
-    <time>2005-06-12T15:04:51.782Z</time>
-    <name>WP0235</name>
-    <cmt>WP0235</cmt>
-    <desc>WP0235</desc>
-    <fix>2d</fix>
-    <sat>3</sat>
-    <pdop>2.000000</pdop>
-  </wpt>
-  <wpt lat="45.489979984" lon="-75.687646640">
-    <ele>98.100</ele>
-    <time>2005-06-12T15:05:11.781Z</time>
-    <name>WP0236</name>
-    <cmt>WP0236</cmt>
-    <desc>WP0236</desc>
-    <sat>2</sat>
-  </wpt>
-  <wpt lat="45.490004984" lon="-75.684934974">
-    <ele>97.400</ele>
-    <time>2005-06-12T15:05:30.780Z</time>
-    <name>WP0237</name>
-    <cmt>WP0237</cmt>
-    <desc>WP0237</desc>
-    <sat>2</sat>
-  </wpt>
-</gpx>
diff --git a/reference/vitosmt.smt b/reference/vitosmt.smt
deleted file mode 100644 (file)
index 3179e59..0000000
Binary files a/reference/vitosmt.smt and /dev/null differ
diff --git a/reference/waypoints.nmea.gz b/reference/waypoints.nmea.gz
new file mode 100644 (file)
index 0000000..ca82ece
Binary files /dev/null and b/reference/waypoints.nmea.gz differ
diff --git a/reference/wfff.gpu b/reference/wfff.gpu
deleted file mode 100644 (file)
index dec2b18..0000000
+++ /dev/null
@@ -1 +0,0 @@
-WitoldM  4529.388N 07541.190W 0000000m 001217AD3124/AP/WEP On/Ch 11/- a
diff --git a/reference/wfff.xml b/reference/wfff.xml
deleted file mode 100644 (file)
index fc70b56..0000000
+++ /dev/null
@@ -1,17 +0,0 @@
-<DocumentElement>
-  <AP>
-    <WEP>On</WEP>
-    <MAC>001217AD3124</MAC>
-    <SSID>WitoldM</SSID>
-    <Type>AP</Type>
-    <RSSI>0</RSSI>
-    <MaxRSSI>-77</MaxRSSI>
-    <MinRSSI>-85</MinRSSI>
-    <Channel>11</Channel>
-    <FirstSeen>2006-03-11T09:07:46-05:00</FirstSeen>
-    <LastSeen>2006-03-11T09:07:52-05:00</LastSeen>
-    <HDOP>14.2</HDOP>
-    <Lat>45.489801666666672</Lat>
-    <Lon>-75.686505</Lon>
-  </AP>
-</DocumentElement>
diff --git a/reference/yahoo.csv b/reference/yahoo.csv
deleted file mode 100644 (file)
index a8f590e..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-No,Latitude,Longitude,Name\r
-1,37.416384,-122.024853,"701 FIRST AVE, SUNNYVALE, CA, 94089-1019, US"\r
diff --git a/reference/yahoo.xml b/reference/yahoo.xml
deleted file mode 100644 (file)
index 7425755..0000000
+++ /dev/null
@@ -1,17 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<ResultSet xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-xmlns="urn:yahoo:maps"
-xsi:schemaLocation="urn:yahoo:maps http://local.yahooapis.com/MapsService/V1/GeocodeResponse.xsd">
-  <Result precision="address">
-<Latitude>37.416384</Latitude>
-
-<Longitude>-122.024853</Longitude>
-<Address>701 FIRST AVE</Address>
-<City>SUNNYVALE</City>
-<State>CA</State>
-
-<Zip>94089-1019</Zip>
-<Country>US</Country>
-  </Result>
-</ResultSet>
diff --git a/skyforce.cc b/skyforce.cc
deleted file mode 100644 (file)
index b5152f1..0000000
+++ /dev/null
@@ -1,386 +0,0 @@
-/*
-
-    Support for SkymapII / SkymapIIIC & KMD150 ascii files
-
-    Copyright (C) 2008 Olaf Klein, o.b.klein@gpsbabel.org
-
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with this program; if not, write to the Free Software
-    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
-
- */
-
-
-
-#include "defs.h"
-#include <cmath>
-#include <cstdio>
-#include <cstdlib>
-
-#define MYNAME "skyforce"
-
-
-static
-QVector<arglist_t> skyforce_args = {
-};
-
-static gbfile* fin, *fout;
-static int rte_num, wpt_num;
-static short_handle short_h;
-static const Waypoint* prev_wpt;
-
-
-static Waypoint*
-skyforce_parse_coords(const char* str)
-{
-  if (strlen(str) < 38) {
-    fatal(MYNAME ": Incomplete line!\n");
-  }
-
-  auto* wpt = new Waypoint;
-
-  wpt->latitude = atof(str + 21);
-  if (str[20] == 'S') {
-    wpt->latitude = -wpt->latitude;
-  }
-  wpt->latitude = ddmm2degrees(wpt->latitude);
-
-  wpt->longitude = atof(str + 30);
-  if (str[29] == 'W') {
-    wpt->longitude = -wpt->longitude;
-  }
-  wpt->longitude = ddmm2degrees(wpt->longitude);
-
-  return wpt;
-}
-
-
-static Waypoint*
-skyforce_parse_wpt(const char* str, int* rte_num_out)
-{
-  Waypoint* wpt = skyforce_parse_coords(str);
-  if (wpt == nullptr) {
-    return nullptr;
-  }
-
-  // The line has fixed columns and starts like:
-  // R 001 029 BEARHILL  N42...
-  // Grab "BEARHILL" and whack trailing space.
-  wpt->shortname = QString(str).mid(10,9).trimmed();
-
-  if (rte_num_out) {
-    *rte_num_out = atoi(str + 2);
-  }
-
-  return wpt;
-}
-
-
-static Waypoint*
-skyforce_parse_trk(const char* str)
-{
-  char buf[15];
-
-  Waypoint* wpt = skyforce_parse_coords(str);
-  if (wpt == nullptr) {
-    return nullptr;
-  }
-  strncpy(buf, str + 2, sizeof(buf) - 1);
-  buf[14] = 0;
-
-  QDateTime dt = QDateTime::fromString(buf, "ddMMyy  hhmmss");
-  dt.setTimeSpec(Qt::UTC);
-  dt = dt.addYears(100);
-
-  wpt->SetCreationTime(dt);
-  int len = strlen(str);
-
-  if (len >= 45) {
-    WAYPT_SET(wpt, speed, KNOTS_TO_MPS(atof(str + 39)));
-  }
-  if (len >= 59) {
-    wpt->altitude = FEET_TO_METERS(atof(str + 54));
-    if (str[53] == '-') {
-      wpt->altitude = -wpt->altitude;
-    }
-  }
-
-  return wpt;
-}
-
-
-static void
-skyforce_head_disp_cb(const route_head* head)
-{
-  prev_wpt = nullptr;
-  if (head->rte_waypt_ct() <= 0) {
-    return;
-  }
-
-  wpt_num = 0;
-  rte_num++;
-
-  if (rte_num > 999) {
-    if (rte_num == 1000) {
-      warning(MYNAME ": Can't store more than 999 routes. Some routes skipped!\n");
-    }
-    return;
-  }
-}
-
-
-static void
-skyforce_waypt_disp_cb(const Waypoint* wpt)
-{
-  char buf[75];        /* long enough for all data types */
-
-
-  memset(buf, ' ', sizeof(buf));
-  buf[sizeof(buf) - 1] = '\0';
-
-  switch (global_opts.objective) {
-  case wptdata:
-    buf[0] = 'W';
-    break;
-  case trkdata:
-    buf[0] = 'L';
-    break;
-  case rtedata:
-    buf[0] = 'R';
-    break;
-  default: ; /* should never happen */
-  }
-
-  if (global_opts.objective == trkdata) {
-    struct tm tm;
-
-    const time_t tt = wpt->GetCreationTime().toTime_t();
-    tm = *gmtime(&tt);
-    strftime(buf + 2, sizeof(buf) - 2, "%d%m%y  %H%M%S    ", &tm);
-  } else {
-    if (rte_num > 999) {
-      return;
-    }
-
-    wpt_num++;
-    if (wpt_num > 999) {
-      if (wpt_num == 1000) {
-        warning(MYNAME ": Can't store more than 999 waypoints. Some waypoints skipped!\n");
-      }
-      return;
-    }
-    QString name;
-    if (global_opts.synthesize_shortnames) {
-      name = mkshort_from_wpt(short_h, wpt);
-    } else {
-      name = mkshort(short_h, wpt->shortname);
-    }
-
-    if (global_opts.objective == rtedata) {
-      snprintf(buf + 2, sizeof(buf) - 2, "%03d ", rte_num);
-    }
-    snprintf(buf + 6, sizeof(buf) - 6, "%03d %-9s ", wpt_num, CSTR(name));
-  }
-
-
-  double lat = degrees2ddmm(wpt->latitude);
-  buf[20] = (wpt->latitude < 0) ? 'S' : 'N';
-  snprintf(&buf[21], sizeof(buf) - 21, "%06.2f ", fabs(lat));
-
-  double lon = degrees2ddmm(wpt->longitude);
-  buf[29] = (wpt->longitude < 0) ? 'W' : 'E';
-  snprintf(&buf[30], sizeof(buf) - 30, "%08.2f ", fabs(lon));
-
-  if (global_opts.objective == trkdata) {
-    double alt;
-
-    if (wpt->altitude == unknown_alt) {
-      alt = 0;
-    } else {
-      alt = METERS_TO_FEET(wpt->altitude);
-    }
-    double speed = MPS_TO_KNOTS(waypt_speed(prev_wpt, wpt));
-
-    snprintf(&buf[39], sizeof(buf) - 39, "%06.2f 000.00 %c%05d",
-             speed,
-             alt < 0 ? '-' : '+', si_round(fabs(alt)));
-  }
-
-  rtrim(buf);
-  gbfprintf(fout, "%s\n", buf);
-
-  prev_wpt = wpt;
-}
-
-/*******************************************************************************
-* %%%        global callbacks called by gpsbabel main process              %%% *
-*******************************************************************************/
-
-static void
-skyforce_rd_init(const QString& fname)
-{
-  fin = gbfopen(fname, "r", MYNAME);
-}
-
-
-static void
-skyforce_rd_deinit()
-{
-  gbfclose(fin);
-}
-
-
-static void
-skyforce_read()
-{
-  char* str;
-
-  wpt_num = 0;
-  route_head* rte = nullptr;
-  route_head* trk = nullptr;
-  rte_num = -1;
-
-  while ((str = gbfgetstr(fin))) {
-
-    Waypoint* wpt;
-    int i;
-
-    str = lrtrim(str);
-    if (*str == '\0') {
-      continue;
-    }
-
-    switch (*str) {
-
-    case 'W':
-      wpt = skyforce_parse_wpt(str, nullptr);
-      if (wpt == nullptr) {
-        continue;
-      }
-      waypt_add(wpt);
-      break;
-
-    case 'R':
-      wpt = skyforce_parse_wpt(str, &i);
-      if (wpt == nullptr) {
-        continue;
-      }
-
-      if (i != rte_num) {
-        rte_num = i;
-        rte = nullptr;
-      }
-
-      if (rte == nullptr) {
-        rte = new route_head;
-        route_add_head(rte);
-        rte->rte_num = rte_num;
-      }
-      route_add_wpt(rte, wpt);
-      break;
-
-    case 'L':
-      wpt = skyforce_parse_trk(str);
-      if (wpt == nullptr) {
-        continue;
-      }
-      if (trk == nullptr) {
-        trk = new route_head;
-        track_add_head(trk);
-      }
-      track_add_wpt(trk, wpt);
-      break;
-
-    default:
-      fatal(MYNAME ": Invalid line marker '%c'!\n", *str);
-    }
-  }
-}
-
-
-static void
-skyforce_wr_init(const QString& fname)
-{
-  fout = gbfopen(fname, "w", MYNAME);
-
-  short_h = mkshort_new_handle();
-
-  setshort_length(short_h, 9);
-  setshort_badchars(short_h, "\r\n\t");
-  setshort_mustupper(short_h, 1);
-  setshort_mustuniq(short_h, 1);
-  setshort_whitespace_ok(short_h, 0);
-  setshort_repeating_whitespace_ok(short_h, 0);
-
-  wpt_num = 0;
-  rte_num = 0;
-}
-
-
-static void
-skyforce_wr_deinit()
-{
-  mkshort_del_handle(&short_h);
-  gbfclose(fout);
-}
-
-
-static void
-skyforce_write()
-{
-  switch (global_opts.objective) {     /* We can only write one data type at a time */
-
-  case wptdata:
-    setshort_defname(short_h, "WPT");
-    waypt_disp_all(skyforce_waypt_disp_cb);
-    break;
-
-  case rtedata:
-    setshort_defname(short_h, "RTE");
-    setshort_mustuniq(short_h, 0);
-    route_disp_all(skyforce_head_disp_cb, nullptr, skyforce_waypt_disp_cb);
-    break;
-
-  case trkdata:
-    track_disp_all(skyforce_head_disp_cb, nullptr, skyforce_waypt_disp_cb);
-    break;
-
-  case posndata:
-    fatal(MYNAME ": Realtime positioning not supported.\n");
-    break;
-
-  default:
-    fatal(MYNAME ": Unknown data mode!\n");
-  }
-}
-
-
-/**************************************************************************/
-
-ff_vecs_t skyforce_vecs = {
-  ff_type_file,
-  FF_CAP_RW_ALL,       /* read and write waypoints, tracks and routes*/
-  skyforce_rd_init,
-  skyforce_wr_init,
-  skyforce_rd_deinit,
-  skyforce_wr_deinit,
-  skyforce_read,
-  skyforce_write,
-  nullptr,
-  &skyforce_args,
-  CET_CHARSET_ASCII, 1
-  , NULL_POS_OPS,
-  nullptr
-};
-
-/**************************************************************************/
diff --git a/stmsdf.cc b/stmsdf.cc
deleted file mode 100644 (file)
index 0787696..0000000
--- a/stmsdf.cc
+++ /dev/null
@@ -1,831 +0,0 @@
-/*
-
-    Support for Suunto Trackmanager SDF format.
-
-    Copyright (C) 2005,2007 Olaf Klein, o.b.klein@gpsbabel.org
-
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with this program; if not, write to the Free Software
-    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
-*/
-
-/*
-    2006/04/05: initial release (not published in GPSBabel)
-    2006/07/19: finished reader and writer for type 4,5,28 of ver. 1
-    2006/10/31: remove wptdata from case statement (data_write)
-
-    ToDo: Ascending/Descending
-*/
-
-#include "defs.h"
-
-#if CSVFMTS_ENABLED
-
-#include <algorithm>                  // for sort
-#include <cstdlib>                    // for atoi
-#include <cstring>                    // for strchr
-#include <ctime>                      // for localtime, strftime
-
-#include <QDate>                      // for QDate
-#include <QDateTime>                  // for QDateTime
-#include <QList>                      // for QList<>::iterator, QList
-#include <QRegularExpression>         // for QRegularExpression
-#include <QString>                    // for QString, operator+
-#include <QStringList>                // for QStringList
-#include <QTime>                      // for QTime
-#include <QtGlobal>                   // for qAsConst, QAddConst<>::Type
-
-#include "cet_util.h"                 // for cet_convert_init
-#include "csv_util.h"                 // for csv_lineparse
-#include "gbfile.h"                   // for gbfprintf, gbfclose, gbfopen, gbfgetstr, gbfile
-#include "grtcirc.h"                  // for RAD, gcdist, heading_true_degrees, radtometers
-#include "jeeps/gpsmath.h"            // for GPS_Lookup_Datum_Index, GPS_Math_WGS84_To_Known_Datum_M
-#include "src/core/datetime.h"        // for DateTime
-#include "src/core/logging.h"         // for Warning, Fatal
-
-
-#define MYNAME "stmsdf"
-
-#define ALT(a) (a->altitude != unknown_alt) ? a->altitude : 0
-
-enum sdf_section_e {
-  sdf_unknown,
-  sdf_header,
-  sdf_points,
-  sdf_custom
-};
-
-static gbfile* fin, *fout;
-
-static int lineno;
-static int datum;
-static int filetype;
-static route_head* route;
-static QList<Waypoint*> trackpts;
-static QString rte_name;
-static QString rte_desc;
-
-static const Waypoint* trkpt_out;
-static const route_head* trk_out;
-
-static double trkpt_dist;
-static double minalt, maxalt, maxspeed;
-static double this_distance, all_dist;
-static time_t this_time, all_time;
-static double all_asc, all_desc;
-static int this_index;                 /* from 1 to ... */
-static int all_points;
-static int this_points;
-static int saved_points;
-static time_t start_time;
-static bool this_valid;
-static short_handle short_h;
-
-#define route_index this_index
-#define track_index this_index
-#define all_route_points all_points
-#define all_track_points all_points
-#define route_points this_points
-#define track_points this_points
-#define saved_track_points saved_points
-#define this_route_valid this_valid
-
-/* placeholders for options */
-
-static char* opt_route_index;
-static int opt_route_index_value;
-
-static
-QVector<arglist_t> stmsdf_args = {
-  {
-    "index", &opt_route_index,
-    "Index of route (if more than one in source)", "1", ARGTYPE_INT, "1", nullptr, nullptr
-  },
-};
-
-
-/* ----------------------------------------------------------- */
-
-static void
-parse_header(char* line)
-{
-  char* str;
-  QString key;
-  const char* prod = nullptr;
-  int column = -1;
-
-  while ((str = csv_lineparse(line, "=", "", lineno))) {
-    line = nullptr;
-    column++;
-    QString qstr(str);
-    bool ok;
-
-    switch (column) {
-    case 0:
-      key = qstr.toUpper();
-      break;
-    case 1:
-      if (key == "DATUM") {
-        datum = GPS_Lookup_Datum_Index(str);
-      } else if (key == "FILEVERSION") {
-        int ver = qstr.toInt(&ok);
-        is_fatal(!ok || (ver != 1),
-                 MYNAME ": This version '%d' is not yet supported. Please report!", ver);
-      } else if (key == "NAME") {
-        rte_name = str;
-      } else if (key == "NOTES") /* ToDo */;
-      else if (key == "SOURCE") {
-        rte_desc = str;
-      } else if (key == "TYPE") {
-        filetype = qstr.toInt(&ok);
-        if (!ok) {
-          fatal(FatalMsg() << MYNAME << "Unknown file type " << key);
-        }
-        switch (filetype) {
-        case 4:        /* M9 TrackLog (Suunto Sail Manager) */
-        case 5: /* route */
-        case 28: /* X9 TrackLog (Suunto Trek Manager */
-          break;
-
-        // 2014-02-11: Added breaks after 78 and 79 as the author "obviously"
-        // meant to treat those as handled.
-        case 78:
-          prod = "S6 SkiChrono";
-          break;
-        case 79:
-          prod = "S6 Skilog";
-          break;
-
-        default:
-          if (prod == nullptr) {
-            prod = "unknown";
-          }
-          fatal(MYNAME ": Unsupported file type (%s, type %d)!\n", prod, filetype);
-        }
-        break;
-      default:
-        break;
-      }
-    }
-  }
-}
-
-static bool
-track_sort_cb(const Waypoint* a, const Waypoint* b)
-{
-  return a->GetCreationTime() < b->GetCreationTime();
-}
-
-static void
-finalize_tracks()
-{
-  route_head* track = nullptr;
-  int trackno = 0;
-
-  if (trackpts.isEmpty()) {
-    return;
-  }
-
-  std::sort(trackpts.begin(), trackpts.end(), track_sort_cb);
-
-  foreach (Waypoint* wpt, trackpts) {
-    if (wpt->wpt_flags.fmt_use == 2) { /* log continued */
-      track = nullptr;
-    }
-    if (track == nullptr) {
-      track = new route_head;
-      track_add_head(track);
-      trackno++;
-      if (rte_name != nullptr) {
-        if (trackno > 1) {
-          track->rte_name = QString("%1 (%2)").arg(rte_name).arg(trackno);
-        } else {
-          track->rte_name = rte_name;
-        }
-      }
-      if (rte_desc != nullptr) {
-        track->rte_desc = rte_desc;
-      }
-    }
-    track_add_wpt(track, wpt);
-    if (wpt->wpt_flags.fmt_use == 1) { /* log pause */
-      track = nullptr;
-    }
-    wpt->wpt_flags.fmt_use = 0;
-  }
-
-  trackpts.clear();
-}
-
-static void
-parse_point(char *line) {
-  char *str;
-  int column = -1;
-  int what = -1;        /* -1 = unknown, 0 = tp, 1 = mp, 2 = wp, 3 = ap  */
-  Waypoint *wpt = nullptr;
-  QDate dt;
-  QTime tm;
-
-  while ((str = csv_lineparse(line, ",", "", lineno))) {
-
-    line = nullptr;
-    column++;
-    QString qstr(str);
-    bool ok(true);
-    // TODO: Several entries use a QString variant. This whole function should just parse it like that.
-
-    switch (column) {
-      case 0:
-        if (qstr == "\"TP\"") {
-          what = 0;
-          column++;    /* skip name */
-        } else if (qstr == "\"MP\"") {
-          what = 1;
-        } else if (qstr == "\"WP\"") {
-          what = 2;
-        } else if (qstr == "\"AP\"") {
-          what = 3;
-        } else {
-          warning(MYNAME ": Unknown point type %s at line %d!\n", str, lineno);
-          return;
-        }
-        wpt = new Waypoint;
-        break;
-
-      case 1:
-        wpt->shortname = qstr.remove('\"');
-        if ((what == 2) || (what == 3)) {
-          column += 2;  /* doesn't have date and time */
-        }
-        break;
-      case 2: {
-        // Date is in format dd.mm.yyyy
-        const auto v = qstr.split('.');
-
-        if (v.size() == 3) {
-          auto day = v[0].toInt();
-          auto month = v[1].toInt();
-          auto year = v[2].toInt();
-          dt = QDate(year, month, day);
-        } else {
-          fatal(FatalMsg() << MYNAME << "Invalid date" << qstr);
-        }
-        break;
-      }
-      case 3: {
-        // Time is hh:mm.ss - yes, colon and period.
-        const auto v = qstr.split(QRegularExpression("[.:]"));
-        if (v.size() == 3) {
-          auto hour = v[0].toInt();
-          auto min = v[1].toInt();
-          auto sec = v[2].toInt();
-          tm = QTime(hour, min, sec);
-        } else {
-          fatal(FatalMsg() << MYNAME << "Invalid Time" << qstr);
-        }
-        break;
-      }
-      case 4:
-        wpt->latitude = qstr.toDouble(&ok);
-        if (!ok) {
-          fatal(FatalMsg() << MYNAME << "Invalid latitude" << qstr);
-        }
-        break;
-      case 5:
-        wpt->longitude = qstr.toDouble(&ok);
-        if (!ok) {
-          fatal(FatalMsg() << MYNAME << "Invalid longitude" << qstr);
-        }
-        break;
-      case 6: {
-        // Not entirely sure if this is optional.
-        double alt = qstr.toDouble(&ok);
-        if (ok) {
-          wpt->altitude = alt;
-        }
-      }
-        break;
-      case 7: {
-        auto v = qstr.toFloat(&ok);
-        if (ok) {
-          if (what == 0) {
-            WAYPT_SET(wpt, speed, v * 3.6);
-          } else if (what == 3) {
-            WAYPT_SET(wpt, proximity, v);
-            wpt->notes = QString("Alarm point: radius=" + qstr);
-          }
-        }
-        break;
-      }
-      case 8:
-        if (what == 0) {
-          auto scourse = qstr.toFloat(&ok);
-          if (ok) {
-            WAYPT_SET(wpt, course, scourse);
-          }
-        }
-        break;
-      case 9:
-      case 10:
-      default:
-        break;
-      case 11:
-        if (wpt && what == 1) {
-          wpt->wpt_flags.fmt_use = qstr.toUInt(&ok);  /* memory point type */
-        }
-        break;
-    }
-  }
-
-  if (dt.isValid() && tm.isValid()) {
-    wpt->SetCreationTime(QDateTime(dt, tm));
-  }
-
-  if (datum != DATUM_WGS84) {
-    double ht;
-    GPS_Math_WGS84_To_Known_Datum_M(wpt->latitude, wpt->longitude, 0,
-                                    &wpt->latitude, &wpt->longitude, &ht, datum);
-  }
-
-  switch (what) {
-    case 0:
-    case 1:
-    trackpts.append(wpt);
-      break;
-    case 2:
-    case 3:
-      if (route == nullptr) {
-        route = new route_head;
-        route_add_head(route);
-      }
-      route_add_wpt(route, wpt);
-      break;
-    default:
-      Warning() << MYNAME << "Invalid internal field type" << what;
-  }
-}
-
-/* ----------------------------------------------------------- */
-
-static void
-rd_init(const QString& fname)
-{
-  fin = gbfopen(fname, "r", MYNAME);
-
-  lineno = 0;
-  route = nullptr;
-  datum = DATUM_WGS84;
-  filetype = 28;
-  rte_name = rte_desc = QString();
-
-  trackpts.clear();
-}
-
-static void
-rd_deinit()
-{
-  gbfclose(fin);
-  rte_name = QString();
-  rte_desc = QString();
-}
-
-static void
-data_read()
-{
-  char* buf;
-  sdf_section_e section = sdf_unknown;
-
-  while ((buf = gbfgetstr(fin))) {
-    char* cin = lrtrim(buf);
-    if ((lineno++ == 0) && fin->unicode) {
-      cet_convert_init(CET_CHARSET_UTF8, 1);
-    }
-
-    if (*cin == '\0') {
-      continue;
-    }
-
-    if (*cin == '[') {
-      char* cend = strchr(++cin, ']');
-
-      if (cend != nullptr) {
-        *cend = '\0';
-        cin = lrtrim(cin);
-      }
-      if ((*cin == '\0') || (cend == nullptr)) {
-        fatal(MYNAME ": Invalid section header!\n");
-      }
-
-      if (case_ignore_strcmp(cin, "HEADER") == 0) {
-        section = sdf_header;
-      } else if (case_ignore_strcmp(cin, "POINTS") == 0) {
-        section = sdf_points;
-      } else if (case_ignore_strncmp(cin, "CUSTOM", 6) == 0) {
-        section = sdf_custom;
-      } else {
-        warning(MYNAME ": Unknown section \"%s\". Please report.\n", cin);
-        section = sdf_unknown;
-      }
-    } else switch (section) {
-      case sdf_header:
-        parse_header(cin);
-        break;
-      case sdf_points:
-        parse_point(cin);
-        break;
-      case sdf_custom:
-      case sdf_unknown:
-        break;
-      }
-  }
-  finalize_tracks();   /* memory points can be at the end of all trackpoints */
-}
-
-
-static void
-calculate(const Waypoint* wpt, double* dist, double* speed, double* course,
-          double* asc, double* desc)
-{
-  if (trkpt_out != nullptr) {
-    *course = heading_true_degrees(
-                RAD(trkpt_out->latitude), RAD(trkpt_out->longitude),
-                RAD(wpt->latitude), RAD(wpt->longitude));
-
-    *dist = radtometers(gcdist(
-                          RAD(trkpt_out->latitude), RAD(trkpt_out->longitude),
-                          RAD(wpt->latitude), RAD(wpt->longitude)));
-    if (*dist < 0.1) {
-      *dist = 0;  /* calc. diffs on 32- and 64-bit hosts */
-    }
-
-    time_t time = wpt->creation_time.toTime_t() - trkpt_out->GetCreationTime().toTime_t();
-    if (time == 0) {
-      *speed = 0;
-    } else {
-      *speed = *dist / (double)time;
-    }
-
-    if (asc && desc && (trkpt_out->altitude != unknown_alt) && (wpt->altitude != unknown_alt)) {
-      double dh = wpt->altitude - trkpt_out->altitude;
-      if (dh > 0) {
-        *asc += dh;
-      } else {
-        *desc -= dh;
-      }
-    }
-  } else {
-    *speed = 0;
-    *dist = 0;
-    *course = 0;
-    if (asc) {
-      *asc = 0;
-    }
-    if (desc) {
-      *desc = 0;
-    }
-  }
-  if WAYPT_HAS(wpt, speed) {
-    *speed = wpt->speed / 3.6;  /* -> meters per second */
-  }
-  if WAYPT_HAS(wpt, course) {
-    *course = wpt->course;
-  }
-
-}
-
-/* pre-calculation callbacks */
-
-static void
-any_hdr_calc_cb(const route_head* trk)
-{
-
-  trkpt_out = nullptr;
-  this_distance = 0;
-  this_time = 0;
-  this_points = 0;
-
-  this_index++;
-  this_valid = ((opt_route_index_value < 1) || (opt_route_index_value == this_index));
-  if (! this_valid) {
-    return;
-  }
-
-  if (rte_name.isEmpty() && !trk->rte_name.isEmpty()) {
-    rte_name = trk->rte_name;
-    rte_desc = trk->rte_desc;
-  }
-
-  trk_out = trk;
-}
-
-static void
-any_waypt_calc_cb(const Waypoint* wpt)
-{
-  double speed, course, dist;
-
-  /* we can only write ONE route */
-  if (! this_valid) {
-    return;
-  }
-
-  if ((all_points == 0) && (this_points == 0)) {
-    start_time = wpt->GetCreationTime().toTime_t();
-  }
-
-  this_points++;
-
-  if ((wpt->altitude != unknown_alt) && (wpt->altitude < minalt)) {
-    minalt = wpt->altitude;
-  }
-  if ((wpt->altitude != unknown_alt) && (wpt->altitude > maxalt)) {
-    maxalt = wpt->altitude;
-  }
-  calculate(wpt, &dist, &speed, &course, &all_asc, &all_desc);
-  if (speed > maxspeed) {
-    maxspeed = speed;
-  }
-
-  this_distance = this_distance + dist;
-  if (trkpt_out != nullptr) {
-    this_time += (wpt->GetCreationTime().toTime_t() - trkpt_out->GetCreationTime().toTime_t());
-  }
-
-  trkpt_out = wpt;
-}
-
-static void
-any_tlr_calc_cb(const route_head*)
-{
-  if (! this_valid) {
-    return;
-  }
-
-  all_dist += this_distance;
-  all_time += this_time;
-  all_points += this_points;
-}
-
-/* write callbacks */
-
-static void
-track_disp_hdr_cb(const route_head* trk)
-{
-  track_index++;
-  track_points = 0;
-  trk_out = trk;
-  trkpt_out = nullptr;
-}
-
-
-static void
-track_disp_wpt_cb(const Waypoint* wpt)
-{
-  struct tm tm;
-  char tbuf[32];
-  double course, speed, dist;
-  int flag = 0;
-
-  track_points++;
-  all_track_points++;
-
-  time_t ct = wpt->GetCreationTime().toTime_t();
-  tm = *localtime(&ct);
-  strftime(tbuf, sizeof(tbuf), "%d.%m.%Y,%H:%M.%S", &tm);
-
-  calculate(wpt, &dist, &speed, &course, nullptr, nullptr);
-  trkpt_dist = trkpt_dist + dist;
-
-  if (track_points == trk_out->rte_waypt_ct()) {       /* I'm the last in that list */
-    if (all_track_points != saved_track_points) {      /* but not the overall latest */
-      flag = 1;
-    }
-  } else if (track_points == 1) {                      /* I'm the first in that list */
-    if (all_track_points > 1) {                        /* but not the first ever seen */
-      flag = 2;
-    }
-  }
-
-  if (flag == 1) {
-    QString name = wpt->shortname;
-    if (name == nullptr) {
-      name = "Log paused";
-    }
-    gbfprintf(fout, "\"MP\",\"%s\"", CSTR(name));
-  } else if (flag == 2) {
-    QString name = wpt->shortname;
-    if (name == nullptr) {
-      name = "Log continued";
-    }
-    gbfprintf(fout, "\"MP\",\"%s\"", CSTR(name));
-  } else {
-    gbfprintf(fout, "\"TP\"");
-  }
-
-  gbfprintf(fout, ",%s,%.6lf,%.6lf,%.f,%.2f",
-            tbuf,
-            wpt->latitude, wpt->longitude, ALT(wpt), speed);
-  if (flag) {
-    gbfprintf(fout, ",0,0,%d", flag);  /* press, temperature, memory point type */
-  } else {
-    gbfprintf(fout, ",%.1f", course);
-  }
-
-  if (trkpt_dist != 0) {
-    gbfprintf(fout, ",%.6f\n", trkpt_dist);
-  } else {
-    gbfprintf(fout, ",0\n");
-  }
-
-  trkpt_out = wpt;
-}
-
-static void
-track_disp_tlr_cb(const route_head*)
-{
-  trkpt_out = nullptr;
-}
-
-static void
-route_disp_hdr_cb(const route_head*)
-{
-  route_index++;
-  this_route_valid = ((opt_route_index_value < 1) || (opt_route_index_value == track_index));
-}
-
-static void
-route_disp_wpt_cb(const Waypoint* wpt)
-{
-  if (this_route_valid) {
-    QString sn;
-
-    if (global_opts.synthesize_shortnames) {
-      sn = mkshort_from_wpt(short_h, wpt);
-    } else {
-      sn = mkshort(short_h, wpt->shortname);
-    }
-    gbfprintf(fout, "\"WP\",\"%s\",%.8lf,%.8lf,%.f\n",
-              CSTR(sn), wpt->latitude, wpt->longitude, ALT(wpt));
-  }
-}
-
-static void
-track_disp_custom_cb(const Waypoint* wpt)
-{
-  if (wpt->GetCreationTime().isValid() && (wpt->altitude != unknown_alt)) {
-    gbfprintf(fout, "%d,%.f\n", (int)(wpt->GetCreationTime().toTime_t() - start_time), wpt->altitude);
-  }
-}
-
-static void
-wr_init(const QString& fname)
-{
-  fout = gbfopen(fname, "w", MYNAME);
-  short_h = mkshort_new_handle();
-}
-
-static void
-wr_deinit()
-{
-  mkshort_del_handle(&short_h);
-  gbfclose(fout);
-}
-
-static void
-data_write()
-{
-  gbfprintf(fout, "[HEADER]\n");
-  gbfprintf(fout, "FILEVERSION=1\n");
-  gbfprintf(fout, "SOURCE=FILE\n");
-  gbfprintf(fout, "DATUM=WGS84\n");
-
-  rte_name = QString();
-  rte_desc = QString();
-  trkpt_out = nullptr;
-  opt_route_index_value = -1;  /* take all tracks from data pool */
-  track_index = 0;
-  minalt = -unknown_alt;
-  maxalt = unknown_alt;
-  maxspeed = 0;
-  all_dist = 0;
-  all_time = 0;
-  all_asc = 0;
-  all_desc = 0;
-  all_points = 0;
-  start_time = 0;
-
-  setshort_length(short_h, 100);
-  setshort_badchars(short_h, "\r\n");
-  setshort_mustupper(short_h, 0);
-  setshort_mustuniq(short_h, 0);
-  setshort_whitespace_ok(short_h, 1);
-  setshort_repeating_whitespace_ok(short_h, 1);
-
-  switch (global_opts.objective) {
-  case wptdata:
-  case unknown_gpsdata:
-    break;
-
-  case rtedata:
-    gbfprintf(fout, "TYPE=5\n");
-
-    opt_route_index_value = atoi(opt_route_index);
-    route_disp_all(any_hdr_calc_cb, any_tlr_calc_cb, any_waypt_calc_cb);
-    gbfprintf(fout, "DISTANCE=%.f\n", all_dist);
-    if (!rte_name.isEmpty()) {
-      gbfprintf(fout, "NAME=%s\n", CSTR(rte_name));
-    }
-    gbfprintf(fout, "[POINTS]\n");
-    if (route_points > 0) {
-      track_index = 0;
-      route_disp_all(route_disp_hdr_cb, nullptr, route_disp_wpt_cb);
-    }
-    break;
-
-  case trkdata:
-    gbfprintf(fout, "TYPE=28\n");
-
-    track_disp_all(any_hdr_calc_cb, any_tlr_calc_cb, any_waypt_calc_cb);
-    if (all_track_points > 0) {
-      if (!rte_name.isEmpty()) {
-        gbfprintf(fout, "NAME=%s\n", CSTR(rte_name));
-      }
-      if (minalt != -unknown_alt) {
-        gbfprintf(fout, "MINALT=%.f\n", minalt);
-      }
-      if (maxalt != unknown_alt) {
-        gbfprintf(fout, "MAXALT=%.f\n", maxalt);
-      }
-      gbfprintf(fout, "MAXSPEED=%.2f\n", maxspeed);
-      gbfprintf(fout, "DISTANCE=%.f\n", all_dist);
-      gbfprintf(fout, "DURATION=%lu\n", all_time);
-//                             gbfprintf(fout, "TOTASC=%.f\n", all_asc);
-//                             gbfprintf(fout, "TOTDSC=%.f\n", all_desc);
-      if (start_time) {
-        struct tm tm;
-        char tbuf[32];
-
-        tm = *localtime(&start_time);
-        strftime(tbuf, sizeof(tbuf), "%d.%m.%Y %H:%M.%S", &tm);
-        gbfprintf(fout, "DATE=%s\n", tbuf);
-      }
-      if (all_time) {
-        gbfprintf(fout, "AVGSPEED=%.2f\n", all_dist / (double)all_time);
-      }
-    }
-    gbfprintf(fout, "[POINTS]\n");
-    if (all_track_points > 0) {
-
-      trkpt_dist = 0;
-      saved_track_points = all_track_points;
-      all_track_points = 0;
-      track_disp_all(track_disp_hdr_cb, track_disp_tlr_cb, track_disp_wpt_cb);
-
-      if (start_time) {
-        gbfprintf(fout, "[CUSTOM1]\n");
-        track_index = 0;
-        track_disp_all(nullptr, nullptr, track_disp_custom_cb);
-      }
-    }
-    break;
-  case posndata:
-    fatal(MYNAME ": Realtime positioning not supported.\n");
-    break;
-  }
-}
-
-/* ------------------------------------------------------------------ */
-
-ff_vecs_t stmsdf_vecs = {
-  ff_type_file,
-  {
-    ff_cap_none,
-    (ff_cap)(ff_cap_read | ff_cap_write),
-    (ff_cap)(ff_cap_read | ff_cap_write)
-  },
-  rd_init,
-  wr_init,
-  rd_deinit,
-  wr_deinit,
-  data_read,
-  data_write,
-  nullptr,
-  &stmsdf_args,
-  CET_CHARSET_MS_ANSI, 0       /* CET-REVIEW */
-  , NULL_POS_OPS,
-  nullptr
-};
-
-/* ================================================================== */
-
-#endif /* CSVFMTS_ENABLED */
-
diff --git a/stmwpp.cc b/stmwpp.cc
deleted file mode 100644 (file)
index f1e962f..0000000
--- a/stmwpp.cc
+++ /dev/null
@@ -1,336 +0,0 @@
-/*
-
-   Support for "Suunto Trek Manager" (STM) WaypointPlus files,
-   see homepage "http://www.suunto.fi" for more details,
-
-   Copyright (C) 2005,2007 Olaf Klein, o.b.klein@gpsbabel.org
-
-   This program is free software; you can redistribute it and/or modify
-   it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 2 of the License, or
-   (at your option) any later version.
-
-   This program is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-   GNU General Public License for more details.
-
-   You should have received a copy of the GNU General Public License
-   along with this program; if not, write to the Free Software
-   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
-*/
-
-#include <cstdio>                  // for sscanf, snprintf
-#include <cstdlib>                 // for atof, atoi
-#include <cstring>                 // for memset
-#include <ctime>                   // for tm
-
-#include <QDateTime>               // for QDateTime
-#include <QString>                 // for QString
-#include <QTime>                   // for QTime
-#include <QVector>                 // for QVector
-
-#include "defs.h"
-#include "cet_util.h"              // for cet_convert_init
-#include "csv_util.h"              // for csv_lineparse
-#include "gbfile.h"                // for gbfprintf, gbfclose, gbfgetstr, gbfopen, gbfile, gbfputs
-#include "src/core/datetime.h"     // for DateTime
-
-
-#if CSVFMTS_ENABLED
-
-static gbfile* fin, *fout;
-static route_head* track, *route;
-static Waypoint* wpt;
-static short_handle short_h;
-
-#define MYNAME "STMwpp"
-
-#define STM_NOTHING    0
-#define STM_WAYPT      1
-#define STM_TRKPT      2
-#define STM_RTEPT      3
-
-static int track_index;
-static int track_num;
-static int what;
-
-static char* index_opt = nullptr;
-
-static
-QVector<arglist_t> stmwpp_args = {
-  {
-    "index", &index_opt, "Index of route/track to write (if more than one in source)",
-    nullptr, ARGTYPE_INT, "1", nullptr, nullptr
-  },
-};
-
-
-static void
-stmwpp_rd_init(const QString& fname)
-{
-  fin = gbfopen(fname, "rb", MYNAME);
-  track = nullptr;
-  route = nullptr;
-  wpt = nullptr;
-}
-
-static void
-stmwpp_rd_deinit()
-{
-  gbfclose(fin);
-}
-
-static void
-stmwpp_data_read()
-{
-  int line = 0;
-
-  what = STM_NOTHING;
-  char* buff = gbfgetstr(fin);
-  buff = (buff == nullptr) ? (char*) "" : buff;
-
-  if (case_ignore_strncmp(buff, "Datum,WGS 84,WGS 84,", 20) != 0) {
-    fatal(MYNAME ": Invalid GPS datum or not \"WaypointPlus\"\" file!\n");
-  }
-
-  while ((buff = gbfgetstr(fin))) {
-    char* c;
-    int column = -1;
-    struct tm time;
-
-    if ((line++ == 0) && fin->unicode) {
-      cet_convert_init(CET_CHARSET_UTF8, 1);
-    }
-
-    buff = lrtrim(buff);
-    if (*buff == '\0') {
-      continue;
-    }
-
-    wpt = nullptr;
-    memset(&time, 0, sizeof(time));
-    int milliseconds = 0;
-
-    while ((c = csv_lineparse(buff, ",", "", column++))) {
-      int new_what;
-
-      buff = nullptr;
-
-      switch (column) {
-      case 0:
-        if (case_ignore_strcmp(c, "WP") == 0) {
-          new_what = STM_WAYPT;
-        } else if (case_ignore_strcmp(c, "TP") == 0) {
-          new_what = STM_TRKPT;
-        } else {
-          fatal(MYNAME ": Unknown feature \"%s\"!\n", c);
-        }
-
-        if ((what != STM_NOTHING) && (new_what != what)) {
-          fatal(MYNAME ": Only one feature (route or track) is supported by STM!\n");
-        }
-
-        what = new_what;
-        wpt = new Waypoint;
-        break;
-
-      case 1:
-        if (what == STM_TRKPT) {
-          column++;  /* no name -> skip column two */
-        }
-        break;
-
-      case 2:
-        wpt->shortname = QString::fromLatin1(c);
-        break;
-
-      case 3:
-        wpt->latitude = atof(c);
-        break;
-
-      case 4:
-        wpt->longitude = atof(c);
-        break;
-
-      case 5:
-        sscanf(c, "%d/%d/%d", &time.tm_mon, &time.tm_mday, &time.tm_year);
-        break;
-
-      case 6:
-        sscanf(c, "%d:%d:%d.%d", &time.tm_hour, &time.tm_min, &time.tm_sec, &milliseconds);
-        /* makes sense only for recorded trackpoints */
-        if (what != STM_TRKPT) {
-          milliseconds = 0;
-        }
-        break;
-
-      default:
-        break;
-      }
-    }
-    if (wpt != nullptr) {
-      time.tm_year -= 1900;
-      time.tm_mon--;
-      wpt->SetCreationTime(mkgmtime(&time), milliseconds);
-
-      switch (what) {
-      case STM_WAYPT:
-        waypt_add(wpt);
-        if (global_opts.objective == rtedata) {
-          if (route == nullptr) {
-            route = new route_head;
-            route_add_head(route);
-          }
-          route_add_wpt(route, new Waypoint(*wpt));
-        }
-        break;
-
-      case STM_TRKPT:
-        if (track == nullptr) {
-          track = new route_head;
-          track_add_head(track);
-        }
-        track_add_wpt(track, wpt);
-        break;
-      }
-      wpt = nullptr;
-    }
-  }
-}
-
-static void
-stmwpp_rw_init(const QString& fname)
-{
-  fout = gbfopen(fname, "wb", MYNAME);
-  short_h = mkshort_new_handle();
-}
-
-static void
-stmwpp_rw_deinit()
-{
-  mkshort_del_handle(&short_h);
-  gbfclose(fout);
-}
-
-static void
-stmwpp_track_hdr(const route_head*)
-{
-  track_num++;
-}
-
-static void
-stmwpp_write_double(const double val)
-{
-  char buff[64];
-
-  char* c = buff + snprintf(buff, sizeof(buff), "%3.7f", val);
-  while (*--c == '0') {
-    *c = '\0';
-  }
-  if (*c == '.') {
-    *++c = '0';
-  }
-  gbfprintf(fout, "%s,", buff);
-}
-
-static void
-stmwpp_waypt_cb(const Waypoint* waypoint)
-{
-  if (track_index != track_num) {
-    return;
-  }
-
-  QString sn;
-  switch (what) {
-
-  case STM_WAYPT:
-  case STM_RTEPT:
-    if (global_opts.synthesize_shortnames) {
-      sn = mkshort_from_wpt(short_h, waypoint);
-    } else {
-      sn = mkshort(short_h, waypoint->shortname);
-    }
-    gbfprintf(fout, "WP,D,%s,", CSTRc(sn));
-    break;
-
-  case STM_TRKPT:
-    gbfprintf(fout, "TP,D,");
-    break;
-  }
-  stmwpp_write_double(waypoint->latitude);
-  stmwpp_write_double(waypoint->longitude);
-  QString datetime = waypoint->GetCreationTime().toUTC().toString("MM/dd/yyyy,HH:mm:ss");
-  gbfputs(datetime, fout);
-  switch (what) {
-  case STM_WAYPT:
-  case STM_RTEPT:
-    gbfprintf(fout, ".%02d", 0);
-    break;
-  case STM_TRKPT:
-    gbfprintf(fout, ".%03d", waypoint->GetCreationTime().time().msec());
-    break;
-  }
-  gbfprintf(fout, ",\r\n");
-}
-
-static void
-stmwpp_data_write()
-{
-  setshort_length(short_h, 100);
-  setshort_badchars(short_h, ",\r\n");
-  setshort_mustupper(short_h, 0);
-  setshort_mustuniq(short_h, 0);
-  setshort_whitespace_ok(short_h, 1);
-  setshort_repeating_whitespace_ok(short_h, 1);
-
-  track_num = 0;
-  if (index_opt != nullptr) {
-    track_index = atoi(index_opt);
-  } else {
-    track_index = 1;
-  }
-
-  gbfprintf(fout, "Datum,WGS 84,WGS 84,0,0,0,0,0\r\n");
-
-  switch (global_opts.objective) {
-  case wptdata:
-  case unknown_gpsdata:
-    what = STM_WAYPT;
-    track_index = track_num;   /* disable filter */
-    setshort_defname(short_h, "WPT");
-    waypt_disp_all(stmwpp_waypt_cb);
-    break;
-  case rtedata:
-    what = STM_RTEPT;
-    setshort_defname(short_h, "RPT");
-    route_disp_all(stmwpp_track_hdr, nullptr, stmwpp_waypt_cb);
-    break;
-  case trkdata:
-    what = STM_TRKPT;
-    track_disp_all(stmwpp_track_hdr, nullptr, stmwpp_waypt_cb);
-    break;
-  case posndata:
-    fatal(MYNAME ": Realtime positioning not supported.\n");
-    break;
-  }
-}
-
-ff_vecs_t stmwpp_vecs = {
-  ff_type_file,
-  FF_CAP_RW_ALL,
-  stmwpp_rd_init,
-  stmwpp_rw_init,
-  stmwpp_rd_deinit,
-  stmwpp_rw_deinit,
-  stmwpp_data_read,
-  stmwpp_data_write,
-  nullptr,
-  &stmwpp_args,
-  CET_CHARSET_MS_ANSI, 0
-  , NULL_POS_OPS,
-  nullptr
-};
-
-#endif /* CSVFMTS_ENABLED */
-
diff --git a/style/gpsman.style b/style/gpsman.style
deleted file mode 100644 (file)
index e8d1e36..0000000
+++ /dev/null
@@ -1,34 +0,0 @@
-# gpsbabel XCSV style file
-#
-# Format: GPSMAN Format
-# Author: Alex Mottram
-#   Date: 12/09/2002
-#
-#
-# As defined in gpsman.c
-#
-#
-
-DESCRIPTION            GPSman
-SHORTLEN               8
-SHORTWHITE             0
-
-# FILE LAYOUT DEFINITIIONS:
-#
-FIELD_DELIMITER                TAB
-RECORD_DELIMITER       NEWLINE
-BADCHARS               TAB
-
-PROLOGUE       !Format: DDD 1 WGS 84
-PROLOGUE       !W:
-
-#
-# INDIVIDUAL DATA FIELDS, IN ORDER OF APPEARANCE:
-#
-IFIELD SHORTNAME, "", "%-8.8s"
-IFIELD DESCRIPTION, "", "%s"
-IFIELD LAT_DIRDECIMAL, "", "%c%f"
-IFIELD LON_DIRDECIMAL, "", "%c%f"
-IFIELD IGNORE, "", "%s"
-
-# gpsman.c likes mkshort len = 8, whitespace = 0.
index c8708d82658ff083184d0c72b5f0af6d8d24b270..5c348c092699a186afffe30011457bc6c65966c3 100644 (file)
@@ -32,10 +32,10 @@ grep -v time <${TMPDIR}/wbt-201.gpx >${TMPDIR}/wbt-201.gpx2
 compare ${REFERENCE}/wbt-201.gpx ${TMPDIR}/wbt-201.gpx2
 
 #
-# gzipped file i/o
+# gzipped file i/o (reading only)
 #
-gpsbabel -i compegps -f ${REFERENCE}/compegps.wpt.gz -o gpx -F ${TMPDIR}/compegps-wpt.gpx
-compare ${REFERENCE}/compegps-wpt.gpx ${TMPDIR}/compegps-wpt.gpx
+gpsbabel -i nmea -f ${REFERENCE}/waypoints.nmea.gz -o nmea -F ${TMPDIR}/waypoints.nmea
+compare ${REFERENCE}/waypoints.nmea ${TMPDIR}/waypoints.nmea
 
 #
 # GPX version detection
diff --git a/testo.d/compegps.test b/testo.d/compegps.test
deleted file mode 100644 (file)
index 2b14761..0000000
+++ /dev/null
@@ -1,28 +0,0 @@
-#
-# CompeGPS I/O tests
-#
-rm -f ${TMPDIR}/compegps*
-# read (CompeGPS)
-gpsbabel -i compegps -f ${REFERENCE}/compegps.wpt -o gpx -F ${TMPDIR}/compegps-wpt.gpx
-compare ${REFERENCE}/compegps-wpt.gpx ${TMPDIR}/compegps-wpt.gpx
-gpsbabel -i compegps -f ${REFERENCE}/route/compegps.rte -o gpx -F ${TMPDIR}/compegps-rte.gpx
-compare ${REFERENCE}/route/compegps-rte.gpx ${TMPDIR}/compegps-rte.gpx
-gpsbabel -i compegps -f ${REFERENCE}/track/compegps.trk -o gpx -F ${TMPDIR}/compegps-trk.gpx
-compare ${REFERENCE}/track/compegps-trk.gpx ${TMPDIR}/compegps-trk.gpx
-# write (CompeGPS)
-gpsbabel -i compegps -f ${REFERENCE}/compegps.wpt -o compegps -F ${TMPDIR}/compegps.wpt
-gpsbabel -i compegps -f ${TMPDIR}/compegps.wpt -o gpx -F ${TMPDIR}/compegps-wpt2.gpx
-compare ${REFERENCE}/compegps-wpt.gpx ${TMPDIR}/compegps-wpt2.gpx
-
-gpsbabel -i compegps -f ${REFERENCE}/compegps_time.wpt -o gpx -F ${TMPDIR}/compegps_time.gpx
-compare ${REFERENCE}/compegps_time_wpt.gpx ${TMPDIR}/compegps_time.gpx
-
-
-gpsbabel -t -i compegps -f ${REFERENCE}/track/compegps.trk -o compegps -F ${TMPDIR}/compegps.trk
-gpsbabel -i compegps -f ${TMPDIR}/compegps.trk -o gpx -F ${TMPDIR}/compegps-trk2.gpx
-compare ${REFERENCE}/track/compegps-trk.gpx ${TMPDIR}/compegps-trk2.gpx
-
-gpsbabel -r -i compegps -f ${REFERENCE}/route/compegps.rte -o compegps -F ${TMPDIR}/compegps.rte
-gpsbabel -i compegps -f ${TMPDIR}/compegps.rte -o gpx -F ${TMPDIR}/compegps-rte2.gpx
-compare ${REFERENCE}/route/compegps-rte.gpx ${TMPDIR}/compegps-rte2.gpx
-
diff --git a/testo.d/csv.test b/testo.d/csv.test
deleted file mode 100644 (file)
index 4bd2107..0000000
+++ /dev/null
@@ -1,51 +0,0 @@
-
-# CSV (Comma separated value) data.
-
-gpsbabel -i geo -f ${REFERENCE}/geocaching.loc -o csv -F ${TMPDIR}/csv.csv
-gpsbabel -i csv -f ${TMPDIR}/csv.csv -o csv -F ${TMPDIR}/csv2.csv
-compare ${TMPDIR}/csv2.csv ${TMPDIR}/csv.csv 
-# And the alternate command line version.
-gpsbabel -i csv -o gpx ${TMPDIR}/csv.csv ${TMPDIR}/csv3.gpx
-gpsbabel -i gpx -o csv ${TMPDIR}/csv3.gpx ${TMPDIR}/csv4.csv
-compare ${TMPDIR}/csv.csv ${TMPDIR}/csv4.csv 
-
-# flip lat and lon so we can distiguish which style file got used.
-echo '# and an internal xcsv and external xcsv.' >> ${TMPDIR}/csvb.style
-echo '# gpsbabel XCSV style file' >> ${TMPDIR}/csvb.style
-echo '#' >> ${TMPDIR}/csvb.style
-echo '# Format: DeLorme SA 9.0 CSV' >> ${TMPDIR}/csvb.style
-echo '# Author: Alex Mottram' >> ${TMPDIR}/csvb.style
-echo '#   Date: 12/09/2002' >> ${TMPDIR}/csvb.style
-echo '#' >> ${TMPDIR}/csvb.style
-echo '#' >> ${TMPDIR}/csvb.style
-echo 'DESCRIPTION      Comma separated values' >> ${TMPDIR}/csvb.style
-echo 'SHORTLEN 8' >> ${TMPDIR}/csvb.style
-echo '#' >> ${TMPDIR}/csvb.style
-echo '#' >> ${TMPDIR}/csvb.style
-echo '# FILE LAYOUT DEFINITIIONS:' >> ${TMPDIR}/csvb.style
-echo '#' >> ${TMPDIR}/csvb.style
-echo 'FIELD_DELIMITER          COMMASPACE' >> ${TMPDIR}/csvb.style
-echo 'RECORD_DELIMITER NEWLINE' >> ${TMPDIR}/csvb.style
-echo 'BADCHARS         COMMA' >> ${TMPDIR}/csvb.style
-echo '' >> ${TMPDIR}/csvb.style
-echo '#' >> ${TMPDIR}/csvb.style
-echo '# INDIVIDUAL DATA FIELDS, IN ORDER OF APPEARANCE:' >> ${TMPDIR}/csvb.style
-echo '#' >> ${TMPDIR}/csvb.style
-echo 'IFIELD   LON_HUMAN_READABLE, "", "%08.5f"' >> ${TMPDIR}/csvb.style
-echo 'IFIELD   LAT_HUMAN_READABLE, "", "%08.5f"' >> ${TMPDIR}/csvb.style
-echo 'IFIELD   DESCRIPTION, "", "%s"' >> ${TMPDIR}/csvb.style
-echo '' >> ${TMPDIR}/csvb.style
-echo 'OFIELD   LON_DECIMAL, "", "%08.5f"' >> ${TMPDIR}/csvb.style
-echo 'OFIELD   LAT_DECIMAL, "", "%08.5f"' >> ${TMPDIR}/csvb.style
-echo 'OFIELD   DESCRIPTION, "", "%s"' >> ${TMPDIR}/csvb.style
-
-# make sure we can follow an internal format with an explict style on read.
-gpsbabel -i csv -f ${TMPDIR}/csv.csv -i xcsv,style=${TMPDIR}/csvb.style  -f ${TMPDIR}/csv.csv -o gpx -F ${TMPDIR}/csv_csvb.gpx
-compare ${REFERENCE}/csv_csvb.gpx ${TMPDIR}/csv_csvb.gpx
-# make sure we remember the style file if we don't give a second -i.
-gpsbabel -i csv -f ${TMPDIR}/csv.csv -f ${TMPDIR}/csv.csv -o gpx -F ${TMPDIR}/csv_csv.gpx
-compare ${REFERENCE}/csv_csv.gpx ${TMPDIR}/csv_csv.gpx
-# make sure we can follow a internal format with an explict style on write.
-gpsbabel -i csv -f ${TMPDIR}/csv.csv -o xcsv,style=${TMPDIR}/csvb.style -F ${TMPDIR}/csvb.csv
-compare ${REFERENCE}/csvb.csv ${TMPDIR}/csvb.csv
-
diff --git a/testo.d/deprecated/compegps.test b/testo.d/deprecated/compegps.test
new file mode 100644 (file)
index 0000000..2b14761
--- /dev/null
@@ -0,0 +1,28 @@
+#
+# CompeGPS I/O tests
+#
+rm -f ${TMPDIR}/compegps*
+# read (CompeGPS)
+gpsbabel -i compegps -f ${REFERENCE}/compegps.wpt -o gpx -F ${TMPDIR}/compegps-wpt.gpx
+compare ${REFERENCE}/compegps-wpt.gpx ${TMPDIR}/compegps-wpt.gpx
+gpsbabel -i compegps -f ${REFERENCE}/route/compegps.rte -o gpx -F ${TMPDIR}/compegps-rte.gpx
+compare ${REFERENCE}/route/compegps-rte.gpx ${TMPDIR}/compegps-rte.gpx
+gpsbabel -i compegps -f ${REFERENCE}/track/compegps.trk -o gpx -F ${TMPDIR}/compegps-trk.gpx
+compare ${REFERENCE}/track/compegps-trk.gpx ${TMPDIR}/compegps-trk.gpx
+# write (CompeGPS)
+gpsbabel -i compegps -f ${REFERENCE}/compegps.wpt -o compegps -F ${TMPDIR}/compegps.wpt
+gpsbabel -i compegps -f ${TMPDIR}/compegps.wpt -o gpx -F ${TMPDIR}/compegps-wpt2.gpx
+compare ${REFERENCE}/compegps-wpt.gpx ${TMPDIR}/compegps-wpt2.gpx
+
+gpsbabel -i compegps -f ${REFERENCE}/compegps_time.wpt -o gpx -F ${TMPDIR}/compegps_time.gpx
+compare ${REFERENCE}/compegps_time_wpt.gpx ${TMPDIR}/compegps_time.gpx
+
+
+gpsbabel -t -i compegps -f ${REFERENCE}/track/compegps.trk -o compegps -F ${TMPDIR}/compegps.trk
+gpsbabel -i compegps -f ${TMPDIR}/compegps.trk -o gpx -F ${TMPDIR}/compegps-trk2.gpx
+compare ${REFERENCE}/track/compegps-trk.gpx ${TMPDIR}/compegps-trk2.gpx
+
+gpsbabel -r -i compegps -f ${REFERENCE}/route/compegps.rte -o compegps -F ${TMPDIR}/compegps.rte
+gpsbabel -i compegps -f ${TMPDIR}/compegps.rte -o gpx -F ${TMPDIR}/compegps-rte2.gpx
+compare ${REFERENCE}/route/compegps-rte.gpx ${TMPDIR}/compegps-rte2.gpx
+
diff --git a/testo.d/deprecated/csv.test b/testo.d/deprecated/csv.test
new file mode 100644 (file)
index 0000000..4bd2107
--- /dev/null
@@ -0,0 +1,51 @@
+
+# CSV (Comma separated value) data.
+
+gpsbabel -i geo -f ${REFERENCE}/geocaching.loc -o csv -F ${TMPDIR}/csv.csv
+gpsbabel -i csv -f ${TMPDIR}/csv.csv -o csv -F ${TMPDIR}/csv2.csv
+compare ${TMPDIR}/csv2.csv ${TMPDIR}/csv.csv 
+# And the alternate command line version.
+gpsbabel -i csv -o gpx ${TMPDIR}/csv.csv ${TMPDIR}/csv3.gpx
+gpsbabel -i gpx -o csv ${TMPDIR}/csv3.gpx ${TMPDIR}/csv4.csv
+compare ${TMPDIR}/csv.csv ${TMPDIR}/csv4.csv 
+
+# flip lat and lon so we can distiguish which style file got used.
+echo '# and an internal xcsv and external xcsv.' >> ${TMPDIR}/csvb.style
+echo '# gpsbabel XCSV style file' >> ${TMPDIR}/csvb.style
+echo '#' >> ${TMPDIR}/csvb.style
+echo '# Format: DeLorme SA 9.0 CSV' >> ${TMPDIR}/csvb.style
+echo '# Author: Alex Mottram' >> ${TMPDIR}/csvb.style
+echo '#   Date: 12/09/2002' >> ${TMPDIR}/csvb.style
+echo '#' >> ${TMPDIR}/csvb.style
+echo '#' >> ${TMPDIR}/csvb.style
+echo 'DESCRIPTION      Comma separated values' >> ${TMPDIR}/csvb.style
+echo 'SHORTLEN 8' >> ${TMPDIR}/csvb.style
+echo '#' >> ${TMPDIR}/csvb.style
+echo '#' >> ${TMPDIR}/csvb.style
+echo '# FILE LAYOUT DEFINITIIONS:' >> ${TMPDIR}/csvb.style
+echo '#' >> ${TMPDIR}/csvb.style
+echo 'FIELD_DELIMITER          COMMASPACE' >> ${TMPDIR}/csvb.style
+echo 'RECORD_DELIMITER NEWLINE' >> ${TMPDIR}/csvb.style
+echo 'BADCHARS         COMMA' >> ${TMPDIR}/csvb.style
+echo '' >> ${TMPDIR}/csvb.style
+echo '#' >> ${TMPDIR}/csvb.style
+echo '# INDIVIDUAL DATA FIELDS, IN ORDER OF APPEARANCE:' >> ${TMPDIR}/csvb.style
+echo '#' >> ${TMPDIR}/csvb.style
+echo 'IFIELD   LON_HUMAN_READABLE, "", "%08.5f"' >> ${TMPDIR}/csvb.style
+echo 'IFIELD   LAT_HUMAN_READABLE, "", "%08.5f"' >> ${TMPDIR}/csvb.style
+echo 'IFIELD   DESCRIPTION, "", "%s"' >> ${TMPDIR}/csvb.style
+echo '' >> ${TMPDIR}/csvb.style
+echo 'OFIELD   LON_DECIMAL, "", "%08.5f"' >> ${TMPDIR}/csvb.style
+echo 'OFIELD   LAT_DECIMAL, "", "%08.5f"' >> ${TMPDIR}/csvb.style
+echo 'OFIELD   DESCRIPTION, "", "%s"' >> ${TMPDIR}/csvb.style
+
+# make sure we can follow an internal format with an explict style on read.
+gpsbabel -i csv -f ${TMPDIR}/csv.csv -i xcsv,style=${TMPDIR}/csvb.style  -f ${TMPDIR}/csv.csv -o gpx -F ${TMPDIR}/csv_csvb.gpx
+compare ${REFERENCE}/csv_csvb.gpx ${TMPDIR}/csv_csvb.gpx
+# make sure we remember the style file if we don't give a second -i.
+gpsbabel -i csv -f ${TMPDIR}/csv.csv -f ${TMPDIR}/csv.csv -o gpx -F ${TMPDIR}/csv_csv.gpx
+compare ${REFERENCE}/csv_csv.gpx ${TMPDIR}/csv_csv.gpx
+# make sure we can follow a internal format with an explict style on write.
+gpsbabel -i csv -f ${TMPDIR}/csv.csv -o xcsv,style=${TMPDIR}/csvb.style -F ${TMPDIR}/csvb.csv
+compare ${REFERENCE}/csvb.csv ${TMPDIR}/csvb.csv
+
diff --git a/testo.d/deprecated/g7towin.test b/testo.d/deprecated/g7towin.test
new file mode 100644 (file)
index 0000000..959fc50
--- /dev/null
@@ -0,0 +1,5 @@
+#
+# G7ToWin (read only) test
+#
+gpsbabel -i g7towin -f ${REFERENCE}/expertgps.g7t -o garmin_txt,utc=0 -F ${TMPDIR}/expertgps-g7t.txt
+compare ${REFERENCE}/expertgps-g7t.txt ${TMPDIR}/expertgps-g7t.txt
diff --git a/testo.d/deprecated/gopal.test b/testo.d/deprecated/gopal.test
new file mode 100644 (file)
index 0000000..a9edc87
--- /dev/null
@@ -0,0 +1,21 @@
+# GoPal
+# GoPal is a bit tricky, because it's a lossy format regarding the first field (timetick).
+# so we first read a reference gopal file, and then write it out as gopal trk file, now with a computed timestamp.
+# Doing so results in more useful timestamps.
+# Next we convert this tst file to gpx to test the writing path, but gpx does not save speed, so do it twice...
+GoPalName=track20080703_173036.trk 
+rm -f ${TMPDIR}/${GoPalName}.*
+#step 1: reference file
+gpsbabel -i gopal -f ${REFERENCE}/track20080703_173036.trk -o gopal -F ${TMPDIR}/${GoPalName}.tst
+#step2: gpx without speed information
+gpsbabel -i gopal -f ${TMPDIR}/${GoPalName}.tst -o gpx  -F ${TMPDIR}/${GoPalName}.im
+gpsbabel -i gpx -f ${TMPDIR}/${GoPalName}.im  -o gopal -F ${TMPDIR}/${GoPalName}.tst2
+#step 3: do it again to have 2 identical gopal files:
+gpsbabel -i gopal -f ${TMPDIR}/${GoPalName}.tst -o gpx  -F ${TMPDIR}/${GoPalName}.im2
+gpsbabel -i gpx -f ${TMPDIR}/${GoPalName}.im2  -o gopal -F ${TMPDIR}/${GoPalName}.tst3
+compare ${TMPDIR}/${GoPalName}.tst2 ${TMPDIR}/${GoPalName}.tst3
+
+# Gopal with 11 fields is slightly more sane.
+gpsbabel -i gopal -f ${REFERENCE}/gopal-11.trk -o gpx -F ${TMPDIR}/gopal-11-gpx.gpx
+compare ${REFERENCE}/gopal-11-gpx.gpx ${TMPDIR}/gopal-11-gpx.gpx
+
diff --git a/testo.d/deprecated/gpsutil.test b/testo.d/deprecated/gpsutil.test
new file mode 100644 (file)
index 0000000..a587e87
--- /dev/null
@@ -0,0 +1,7 @@
+# GPSUtil
+rm -f ${TMPDIR}/gu.wpt ${TMPDIR}/1.gpx ${TMPDIR}/2.gpx
+gpsbabel -i geo -f ${REFERENCE}/geocaching.loc -o gpsutil -F ${TMPDIR}/gu.wpt
+compare ${TMPDIR}/gu.wpt ${REFERENCE}
+gpsbabel -i gpsutil -f ${TMPDIR}/gu.wpt -o gpx -F ${TMPDIR}/1.gpx
+gpsbabel -i gpsutil -f ${REFERENCE}/gu.wpt -o gpx -F ${TMPDIR}/2.gpx
+compare ${TMPDIR}/1.gpx ${TMPDIR}/2.gpx
diff --git a/testo.d/deprecated/jtr.test b/testo.d/deprecated/jtr.test
new file mode 100644 (file)
index 0000000..6c44527
--- /dev/null
@@ -0,0 +1,7 @@
+#
+# Jelbert GeoTagger JTR data files
+#
+gpsbabel -i jtr -f ${REFERENCE}/track/expertgps.jtr -o gpx -F ${TMPDIR}/expertgps~jtr.gpx -o jtr -F ${TMPDIR}/expertgps~jtr.jtr
+compare ${REFERENCE}/track/expertgps~jtr.gpx ${TMPDIR}/expertgps~jtr.gpx
+compare ${REFERENCE}/track/expertgps.jtr ${TMPDIR}/expertgps~jtr.jtr
+
diff --git a/testo.d/deprecated/maggeo.test b/testo.d/deprecated/maggeo.test
new file mode 100644 (file)
index 0000000..9b2a3de
--- /dev/null
@@ -0,0 +1,9 @@
+
+#
+# Magellan Explorist geocaching format (write-only).
+#
+gpsbabel -i gpx -f ${REFERENCE}/gc/GC7FA4.gpx -f ${REFERENCE}/gc/GCGCA8.gpx -o maggeo -F ${TMPDIR}/maggeo.gs 
+compare ${REFERENCE}/gc/maggeo.gs ${TMPDIR}/maggeo.gs
+
+gpsbabel -i maggeo -f ${REFERENCE}/gc/maggeo.gs -o maggeo -F ${TMPDIR}/maggeo2.gs
+compare ${REFERENCE}/gc/maggeo.gs ${TMPDIR}/maggeo2.gs
diff --git a/testo.d/deprecated/mapsend.test b/testo.d/deprecated/mapsend.test
new file mode 100644 (file)
index 0000000..ff367e6
--- /dev/null
@@ -0,0 +1,22 @@
+# Magellan Mapsend
+rm -f ${TMPDIR}/mm.mapsend ${TMPDIR}/mm.gps
+gpsbabel -i geo -f ${REFERENCE}/geocaching.loc -o mapsend -F ${TMPDIR}/mm.mapsend
+gpsbabel -i mapsend -f ${TMPDIR}/mm.mapsend -o gpsutil -F ${TMPDIR}/mm.gps
+compare ${TMPDIR}/mm.gps ${REFERENCE}/gu.wpt
+
+#
+# MAPSEND waypoint / route format
+#
+rm -f ${TMPDIR}/route.mapsend
+gpsbabel -r -i mapsend -f ${REFERENCE}/route/route.mapsend -o mapsend \
+         -F ${TMPDIR}/route.mapsend
+bincompare ${TMPDIR}/route.mapsend ${REFERENCE}/route/route.mapsend
+
+#
+# MAPSEND track format 
+#
+rm -f ${TMPDIR}/mapsend.trk
+gpsbabel -t -i mapsend -f ${REFERENCE}/track/mapsend.trk -o mapsend,trkver=3 \
+         -F ${TMPDIR}/mapsend.trk
+compare ${TMPDIR}/mapsend.trk ${REFERENCE}/track/
+
diff --git a/testo.d/deprecated/mtk_locus.test b/testo.d/deprecated/mtk_locus.test
new file mode 100644 (file)
index 0000000..9fe9bbd
--- /dev/null
@@ -0,0 +1,9 @@
+#
+# mtk_locus logger tests
+#
+FORMAT=mtk_locus
+
+rm -f ${TMPDIR}/$FORMAT.*
+
+gpsbabel -i $FORMAT -f ${REFERENCE}/$FORMAT.nmea -o gpx -F ${TMPDIR}/$FORMAT.gpx >/dev/null
+compare ${REFERENCE}/$FORMAT.gpx ${TMPDIR}/$FORMAT.gpx 
diff --git a/testo.d/deprecated/nmn4.test b/testo.d/deprecated/nmn4.test
new file mode 100644 (file)
index 0000000..2acf6b0
--- /dev/null
@@ -0,0 +1,9 @@
+
+#
+# Navigon Mobile Navigator .rte tests
+#
+rm -f ${TMPDIR}/nmn4-sample*
+gpsbabel -i nmn4 -f ${REFERENCE}/route/nmn4-sample.rte -o gpx -F ${TMPDIR}/nmn4-sample.gpx
+compare ${REFERENCE}/route/nmn4-sample.gpx ${TMPDIR}/nmn4-sample.gpx
+gpsbabel -i gpx -f ${REFERENCE}/route/nmn4-sample.gpx -o nmn4 -F ${TMPDIR}/nmn4-sample-out.rte
+compare ${REFERENCE}/route/nmn4-sample-out.rte ${TMPDIR}/nmn4-sample-out.rte
diff --git a/testo.d/deprecated/pcx.test b/testo.d/deprecated/pcx.test
new file mode 100644 (file)
index 0000000..3210970
--- /dev/null
@@ -0,0 +1,11 @@
+# PCX (Garmin mapsource import) file format
+rm -f ${TMPDIR}/mm.pcx ${TMPDIR}/pcx.gps
+gpsbabel -i gpx -f ${REFERENCE}/geocaching.gpx -o pcx -F ${TMPDIR}/mm.pcx
+gpsbabel -i pcx -f ${TMPDIR}/mm.pcx -o gpsutil -F ${TMPDIR}/pcx.gps
+compare ${REFERENCE}/gu.wpt ${TMPDIR}/pcx.gps
+gpsbabel -t -i gpx -f ${REFERENCE}/track/tracks.gpx -o pcx -F ${TMPDIR}/pcx.trk
+gpsbabel -t -i pcx -f ${REFERENCE}/track/pcx.trk -o pcx -F ${TMPDIR}/pcx2.trk
+compare ${TMPDIR}/pcx.trk ${TMPDIR}/pcx2.trk 
+# GPSUtil strain - hand crafted, but based on problem report.
+gpsbabel -i pcx -f ${REFERENCE}/gpsutil-1.pcx -o pcx -F ${TMPDIR}/mm-2.pcx
+compare ${TMPDIR}/mm-2.pcx ${TMPDIR}/mm.pcx
diff --git a/testo.d/deprecated/pocketfms.test b/testo.d/deprecated/pocketfms.test
new file mode 100644 (file)
index 0000000..d0c9720
--- /dev/null
@@ -0,0 +1,22 @@
+#
+# PocketFMS breadcrumb files
+#
+gpsbabel -i pocketfms_bc -f ${REFERENCE}/pocketfms_bc -o gpx,elevprec=6 -F ${TMPDIR}/pocketfms_bc.gpx
+compare ${REFERENCE}/pocketfms_bc.gpx ${TMPDIR}/pocketfms_bc.gpx
+gpsbabel -i gpx -f ${REFERENCE}/pocketfms_bc.gpx -o pocketfms_bc -F ${TMPDIR}/pocketfms_bc
+bincompare ${REFERENCE}/pocketfms_bc.babel ${TMPDIR}/pocketfms_bc
+
+#
+# PocketFMS flightplan files (.xml)
+#
+gpsbabel -i pocketfms_fp -f ${REFERENCE}/pocketfms_fp.xml -o gpx -F ${TMPDIR}/pocketfms_fp.gpx
+compare ${REFERENCE}/pocketfms_fp.gpx ${TMPDIR}/pocketfms_fp.gpx
+
+#
+# PocketFMS waypoints file (.txt)
+#
+gpsbabel -i gpx -f ${REFERENCE}/pocketfms_fp.gpx -o pocketfms_wp -F ${TMPDIR}/pocketfms_wp.txt
+compare ${REFERENCE}/pocketfms_wp.txt ${TMPDIR}/pocketfms_wp.txt
+gpsbabel -i pocketfms_wp -f ${REFERENCE}/pocketfms_wp.txt -o gpx -F ${TMPDIR}/pocketfms_wp.gpx
+compare ${REFERENCE}/pocketfms_wp.gpx ${TMPDIR}/pocketfms_wp.gpx
+
diff --git a/testo.d/deprecated/skyforce.test b/testo.d/deprecated/skyforce.test
new file mode 100644 (file)
index 0000000..68ee355
--- /dev/null
@@ -0,0 +1,16 @@
+#
+# Skyforce ascii files
+#
+gpsbabel -i skyforce -f ${REFERENCE}/skyforce_wpt.txt -o gpx -F ${TMPDIR}/skyforce_wpt.gpx
+compare ${REFERENCE}/skyforce_wpt.gpx ${TMPDIR}/skyforce_wpt.gpx
+gpsbabel -i skyforce -f ${REFERENCE}/route/skyforce_rte.txt -o gpx -F ${TMPDIR}/skyforce_rte.gpx
+compare ${REFERENCE}/route/skyforce_rte.gpx ${TMPDIR}/skyforce_rte.gpx
+gpsbabel -i skyforce -f ${REFERENCE}/track/skyforce_trk.txt -o gpx -F ${TMPDIR}/skyforce_trk.gpx
+compare ${REFERENCE}/track/skyforce_trk.gpx ${TMPDIR}/skyforce_trk.gpx
+
+gpsbabel -i skyforce \
+       -f ${REFERENCE}/skyforce_wpt.txt \
+       -f ${REFERENCE}/route/skyforce_rte.txt \
+       -f ${REFERENCE}/track/skyforce_trk.txt -o gpx -F ${TMPDIR}/skyforce.gpx
+compare ${REFERENCE}/skyforce.gpx ${TMPDIR}/skyforce.gpx
+
diff --git a/testo.d/deprecated/stmsdf.test b/testo.d/deprecated/stmsdf.test
new file mode 100644 (file)
index 0000000..fa17411
--- /dev/null
@@ -0,0 +1,11 @@
+
+#
+# Suunto SDF
+#
+rm -f ${TMPDIR}/stmsdf*
+gpsbabel -i garmin_txt -f ${REFERENCE}/garmin_txt.txt -t -o stmsdf -F ${TMPDIR}/stmsdf-track.sdf -r -o stmsdf,index=2 -F ${TMPDIR}/stmsdf-route.sdf
+compare ${REFERENCE}/track/stmsdf-track.sdf ${TMPDIR}/stmsdf-track.sdf
+compare ${REFERENCE}/route/stmsdf-route.sdf ${TMPDIR}/stmsdf-route.sdf
+gpsbabel -i stmsdf -f ${TMPDIR}/stmsdf-track.sdf -f ${TMPDIR}/stmsdf-route.sdf -o garmin_txt,prec=2 -F ${TMPDIR}/stmsdf.txt
+compare ${REFERENCE}/stmsdf.txt ${TMPDIR}/stmsdf.txt
+
diff --git a/testo.d/deprecated/stmwpp.test b/testo.d/deprecated/stmwpp.test
new file mode 100644 (file)
index 0000000..85a0933
--- /dev/null
@@ -0,0 +1,12 @@
+
+#
+# STMwpp "Suunto Trek Manager" WaypointPlus format tests
+#
+rm -f ${TMPDIR}/stmwpp-*
+gpsbabel -i stmwpp -f ${REFERENCE}/track/stmwpp-track.txt -o gpx -F ${TMPDIR}/stmwpp-track.gpx
+compare ${REFERENCE}/track/stmwpp-track.gpx ${TMPDIR}/stmwpp-track.gpx
+gpsbabel -i stmwpp -f ${REFERENCE}/route/stmwpp-route.txt -o gpx -F ${TMPDIR}/stmwpp-route.gpx
+compare ${REFERENCE}/route/stmwpp-route.gpx ${TMPDIR}/stmwpp-route.gpx
+gpsbabel -i stmwpp -f ${REFERENCE}/route/stmwpp-route.txt -o stmwpp -F ${TMPDIR}/stmwpp-route.txt
+compare ${REFERENCE}/route/stmwpp-route.txt ${TMPDIR}/stmwpp-route.txt
+
diff --git a/testo.d/deprecated/tiger.test b/testo.d/deprecated/tiger.test
new file mode 100644 (file)
index 0000000..c42ea39
--- /dev/null
@@ -0,0 +1,8 @@
+# Tiger
+# This one is a little tacky, because it's a very lossy format.
+# so we simply test we can write it, and then read it and write it and
+# get an identical file back.
+rm -f ${TMPDIR}/tiger
+gpsbabel -i geo -f ${REFERENCE}/geocaching.loc -o tiger -F ${TMPDIR}/tiger
+gpsbabel -i tiger -f ${TMPDIR}/tiger -o tiger -F ${TMPDIR}/tiger2
+compare ${TMPDIR}/tiger ${TMPDIR}/tiger2
diff --git a/testo.d/deprecated/vpl.test b/testo.d/deprecated/vpl.test
new file mode 100644 (file)
index 0000000..247ffcf
--- /dev/null
@@ -0,0 +1,6 @@
+
+#
+# Basic VPL test
+#
+gpsbabel -i vpl -f ${REFERENCE}/track/vpl_reference.vpl -o gpx -F ${TMPDIR}/vpl_reference.gpx
+compare ${REFERENCE}/track/vpl_reference.gpx ${TMPDIR}/vpl_reference.gpx 
diff --git a/testo.d/deprecated/wfff.test b/testo.d/deprecated/wfff.test
new file mode 100644 (file)
index 0000000..73730f6
--- /dev/null
@@ -0,0 +1,6 @@
+#
+# Wfff.
+#
+gpsbabel -i wfff -f ${REFERENCE}/wfff.xml -o gpsutil -F ${TMPDIR}/wfff.gpu
+compare ${REFERENCE}/wfff.gpu ${TMPDIR}/wfff.gpu
+
diff --git a/testo.d/deprecated/yahoo.test b/testo.d/deprecated/yahoo.test
new file mode 100644 (file)
index 0000000..a5e8bdc
--- /dev/null
@@ -0,0 +1,4 @@
+
+gpsbabel -i yahoo -f ${REFERENCE}/yahoo.xml -o unicsv -F ${TMPDIR}/yahoo.csv
+compare ${REFERENCE}/yahoo.csv ${TMPDIR}/yahoo.csv
+
diff --git a/testo.d/g7towin.test b/testo.d/g7towin.test
deleted file mode 100644 (file)
index 959fc50..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-#
-# G7ToWin (read only) test
-#
-gpsbabel -i g7towin -f ${REFERENCE}/expertgps.g7t -o garmin_txt,utc=0 -F ${TMPDIR}/expertgps-g7t.txt
-compare ${REFERENCE}/expertgps-g7t.txt ${TMPDIR}/expertgps-g7t.txt
index cd59a6a09091cfb2a35594bc444cecd3df6056f1..380f4277f6a52454bc0e834444a0adb9202063c9 100644 (file)
@@ -8,8 +8,10 @@ compare ${REFERENCE}/track/nmea.gpx ${TMPDIR}/nmea_utf16.gpx
 #   with \r\n line endings
 gpsbabel -i nmea -f ${REFERENCE}/track/nmea_utf16_dos -o gpx -F ${TMPDIR}/nmea_utf16_dos.gpx
 compare ${REFERENCE}/track/nmea.gpx ${TMPDIR}/nmea_utf16_dos.gpx
+# TODO(robertl): Check with tsteven4 if we can find another
+# appropriate test withot PCX
 # Assumes pcx reader is still using gbgetstr.
 # These are handcrafted input files, they may not be legal pcx files.
 #   with a unicode character from the supplemental plane encoded in utf16le.
-gpsbabel -i pcx -f ${REFERENCE}/testsupplementalplane.pcx -o unicsv -F ${TMPDIR}/testsupplementalplane.csv
-compare ${REFERENCE}/testsupplementalplane.csv ${TMPDIR}/testsupplementalplane.csv
+## gpsbabel -i pcx -f ${REFERENCE}/testsupplementalplane.pcx -o unicsv -F ${TMPDIR}/testsupplementalplane.csv
+##  compare ${REFERENCE}/testsupplementalplane.csv ${TMPDIR}/testsupplementalplane.csv
diff --git a/testo.d/gopal.test b/testo.d/gopal.test
deleted file mode 100644 (file)
index a9edc87..0000000
+++ /dev/null
@@ -1,21 +0,0 @@
-# GoPal
-# GoPal is a bit tricky, because it's a lossy format regarding the first field (timetick).
-# so we first read a reference gopal file, and then write it out as gopal trk file, now with a computed timestamp.
-# Doing so results in more useful timestamps.
-# Next we convert this tst file to gpx to test the writing path, but gpx does not save speed, so do it twice...
-GoPalName=track20080703_173036.trk 
-rm -f ${TMPDIR}/${GoPalName}.*
-#step 1: reference file
-gpsbabel -i gopal -f ${REFERENCE}/track20080703_173036.trk -o gopal -F ${TMPDIR}/${GoPalName}.tst
-#step2: gpx without speed information
-gpsbabel -i gopal -f ${TMPDIR}/${GoPalName}.tst -o gpx  -F ${TMPDIR}/${GoPalName}.im
-gpsbabel -i gpx -f ${TMPDIR}/${GoPalName}.im  -o gopal -F ${TMPDIR}/${GoPalName}.tst2
-#step 3: do it again to have 2 identical gopal files:
-gpsbabel -i gopal -f ${TMPDIR}/${GoPalName}.tst -o gpx  -F ${TMPDIR}/${GoPalName}.im2
-gpsbabel -i gpx -f ${TMPDIR}/${GoPalName}.im2  -o gopal -F ${TMPDIR}/${GoPalName}.tst3
-compare ${TMPDIR}/${GoPalName}.tst2 ${TMPDIR}/${GoPalName}.tst3
-
-# Gopal with 11 fields is slightly more sane.
-gpsbabel -i gopal -f ${REFERENCE}/gopal-11.trk -o gpx -F ${TMPDIR}/gopal-11-gpx.gpx
-compare ${REFERENCE}/gopal-11-gpx.gpx ${TMPDIR}/gopal-11-gpx.gpx
-
diff --git a/testo.d/gpsman.test b/testo.d/gpsman.test
deleted file mode 100644 (file)
index 1c131d6..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-
-# GPSman 
-rm -f ${TMPDIR}/gm.gm ${TMPDIR}/gm.gm+
-gpsbabel -i geo -f ${REFERENCE}/geocaching.loc -o gpsman -F ${TMPDIR}/gm.gm -o gpsutil -F ${TMPDIR}/gu.wpt
-gpsbabel -i gpsman -f ${TMPDIR}/gm.gm -o gpsutil -F ${TMPDIR}/gm.gm+
-compare ${TMPDIR}/gm.gm+ ${TMPDIR}/gu.wpt
diff --git a/testo.d/gpsutil.test b/testo.d/gpsutil.test
deleted file mode 100644 (file)
index a587e87..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
-# GPSUtil
-rm -f ${TMPDIR}/gu.wpt ${TMPDIR}/1.gpx ${TMPDIR}/2.gpx
-gpsbabel -i geo -f ${REFERENCE}/geocaching.loc -o gpsutil -F ${TMPDIR}/gu.wpt
-compare ${TMPDIR}/gu.wpt ${REFERENCE}
-gpsbabel -i gpsutil -f ${TMPDIR}/gu.wpt -o gpx -F ${TMPDIR}/1.gpx
-gpsbabel -i gpsutil -f ${REFERENCE}/gu.wpt -o gpx -F ${TMPDIR}/2.gpx
-compare ${TMPDIR}/1.gpx ${TMPDIR}/2.gpx
index 16afe9f6a97edcbbb662154a38797a843d79e042..bf7739aab281fa975a882b0f15b3d609322a7606 100644 (file)
@@ -1,22 +1,21 @@
 
 # GPX
 rm -f ${TMPDIR}/gl.gpx ${TMPDIR}/gpx.wpt
-gpsbabel -i geo -f ${REFERENCE}/geocaching.loc -o gpsman -F ${TMPDIR}/gm.gm -o gpsutil -F ${TMPDIR}/gu.wpt
 gpsbabel -i geo -f ${REFERENCE}/geocaching.loc -o gpx -F ${TMPDIR}/gl.gpx
-gpsbabel -i gpx -f ${TMPDIR}/gl.gpx -o gpsutil -F ${TMPDIR}/gpx.wpt
-compare ${TMPDIR}/gpx.wpt ${TMPDIR}/gu.wpt
+gpsbabel -i gpx -f ${TMPDIR}/gl.gpx -o geo -F ${TMPDIR}/gpx.wpt
+compare ${TMPDIR}/gpx.wpt ${TMPDIR}/gpx.wpt
 
 rm -f ${TMPDIR}/gtrnctr_power.gpx
 gpsbabel -i gtrnctr -f ${REFERENCE}/track/gtrnctr_power.tcx -o gpx,garminextensions=1 -F ${TMPDIR}/gtrnctr_power.gpx
-compare  ${REFERENCE}/track/gtrnctr_power.gpx ${TMPDIR}/gtrnctr_power.gpx 
+compare  ${REFERENCE}/track/gtrnctr_power.gpx ${TMPDIR}/gtrnctr_power.gpx
 
 rm -f ${TMPDIR}/tpx-sample.gpx
 gpsbabel -i gpx -f ${REFERENCE}/track/gpx_garmin_extensions.gpx -o gpx,garminextensions -F ${TMPDIR}/tpx-sample.gpx
-compare ${REFERENCE}/track/gpx_garmin_extensions.gpx ${TMPDIR}/tpx-sample.gpx 
+compare ${REFERENCE}/track/gpx_garmin_extensions.gpx ${TMPDIR}/tpx-sample.gpx
 
 rm -f ${TMPDIR}/basecampe~gpx.gpx
 gpsbabel -i gpx -f ${REFERENCE}/basecamp.gpx -o gpx -F ${TMPDIR}/basecamp~gpx.gpx
-compare ${REFERENCE}/basecamp~gpx.gpx ${TMPDIR}/basecamp~gpx.gpx 
+compare ${REFERENCE}/basecamp~gpx.gpx ${TMPDIR}/basecamp~gpx.gpx
 
 rm -f ${TMPDIR}/extensiondata.gpx
 gpsbabel -i unicsv -f ${REFERENCE}/extensiondata.unicsv -x transform,trk=wpt -o gpx,garminextensions -F ${TMPDIR}/extensiondata.gpx
@@ -24,17 +23,17 @@ compare ${REFERENCE}/extensiondata~unicsv.gpx ${TMPDIR}/extensiondata.gpx
 
 # Read, write GPX file with times that don't fit in time_t, subsecond.
 gpsbabel -i gpx -f ${REFERENCE}/bigtime.gpx -o gpx -F ${TMPDIR}/bigtime.gpx
-compare ${REFERENCE}/bigtime.gpx ${TMPDIR}/bigtime.gpx 
+compare ${REFERENCE}/bigtime.gpx ${TMPDIR}/bigtime.gpx
 
 # test standard output
 rm -f ${TMPDIR}/basecamp~gpx_so.gpx
 gpsbabel -i gpx -f ${REFERENCE}/basecamp.gpx -o gpx -F - 1> ${TMPDIR}/basecamp~gpx_so.gpx
-compare ${REFERENCE}/basecamp~gpx.gpx ${TMPDIR}/basecamp~gpx_so.gpx 
+compare ${REFERENCE}/basecamp~gpx.gpx ${TMPDIR}/basecamp~gpx_so.gpx
 
 # test standard input
 rm -f ${TMPDIR}/basecamp~gpx_si.gpx
 gpsbabel -i gpx -f - -o gpx -F ${TMPDIR}/basecamp~gpx_si.gpx 0< ${REFERENCE}/basecamp.gpx
-compare ${REFERENCE}/basecamp~gpx.gpx ${TMPDIR}/basecamp~gpx_si.gpx 
+compare ${REFERENCE}/basecamp~gpx.gpx ${TMPDIR}/basecamp~gpx_si.gpx
 
 # test unknown tags
 rm -f ${TMPDIR}/unknowntag.gpx
diff --git a/testo.d/jogmap.test b/testo.d/jogmap.test
deleted file mode 100644 (file)
index f935804..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
-#
-# Jogmap XML tests
-#
-rm -f ${TMPDIR}/jogmap.*
-gpsbabel -i jogmap -f ${REFERENCE}/track/jogmap.xml -o gpx -F ${TMPDIR}/jogmap.gpx
-compare ${REFERENCE}/track/jogmap-gpx.gpx ${TMPDIR}/jogmap.gpx 
-
diff --git a/testo.d/jtr.test b/testo.d/jtr.test
deleted file mode 100644 (file)
index 6c44527..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
-#
-# Jelbert GeoTagger JTR data files
-#
-gpsbabel -i jtr -f ${REFERENCE}/track/expertgps.jtr -o gpx -F ${TMPDIR}/expertgps~jtr.gpx -o jtr -F ${TMPDIR}/expertgps~jtr.jtr
-compare ${REFERENCE}/track/expertgps~jtr.gpx ${TMPDIR}/expertgps~jtr.gpx
-compare ${REFERENCE}/track/expertgps.jtr ${TMPDIR}/expertgps~jtr.jtr
-
diff --git a/testo.d/maggeo.test b/testo.d/maggeo.test
deleted file mode 100644 (file)
index 9b2a3de..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
-
-#
-# Magellan Explorist geocaching format (write-only).
-#
-gpsbabel -i gpx -f ${REFERENCE}/gc/GC7FA4.gpx -f ${REFERENCE}/gc/GCGCA8.gpx -o maggeo -F ${TMPDIR}/maggeo.gs 
-compare ${REFERENCE}/gc/maggeo.gs ${TMPDIR}/maggeo.gs
-
-gpsbabel -i maggeo -f ${REFERENCE}/gc/maggeo.gs -o maggeo -F ${TMPDIR}/maggeo2.gs
-compare ${REFERENCE}/gc/maggeo.gs ${TMPDIR}/maggeo2.gs
diff --git a/testo.d/mapsend.test b/testo.d/mapsend.test
deleted file mode 100644 (file)
index ff367e6..0000000
+++ /dev/null
@@ -1,22 +0,0 @@
-# Magellan Mapsend
-rm -f ${TMPDIR}/mm.mapsend ${TMPDIR}/mm.gps
-gpsbabel -i geo -f ${REFERENCE}/geocaching.loc -o mapsend -F ${TMPDIR}/mm.mapsend
-gpsbabel -i mapsend -f ${TMPDIR}/mm.mapsend -o gpsutil -F ${TMPDIR}/mm.gps
-compare ${TMPDIR}/mm.gps ${REFERENCE}/gu.wpt
-
-#
-# MAPSEND waypoint / route format
-#
-rm -f ${TMPDIR}/route.mapsend
-gpsbabel -r -i mapsend -f ${REFERENCE}/route/route.mapsend -o mapsend \
-         -F ${TMPDIR}/route.mapsend
-bincompare ${TMPDIR}/route.mapsend ${REFERENCE}/route/route.mapsend
-
-#
-# MAPSEND track format 
-#
-rm -f ${TMPDIR}/mapsend.trk
-gpsbabel -t -i mapsend -f ${REFERENCE}/track/mapsend.trk -o mapsend,trkver=3 \
-         -F ${TMPDIR}/mapsend.trk
-compare ${TMPDIR}/mapsend.trk ${REFERENCE}/track/
-
diff --git a/testo.d/mtk_locus.test b/testo.d/mtk_locus.test
deleted file mode 100644 (file)
index 9fe9bbd..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
-#
-# mtk_locus logger tests
-#
-FORMAT=mtk_locus
-
-rm -f ${TMPDIR}/$FORMAT.*
-
-gpsbabel -i $FORMAT -f ${REFERENCE}/$FORMAT.nmea -o gpx -F ${TMPDIR}/$FORMAT.gpx >/dev/null
-compare ${REFERENCE}/$FORMAT.gpx ${TMPDIR}/$FORMAT.gpx 
diff --git a/testo.d/nmn4.test b/testo.d/nmn4.test
deleted file mode 100644 (file)
index 2acf6b0..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
-
-#
-# Navigon Mobile Navigator .rte tests
-#
-rm -f ${TMPDIR}/nmn4-sample*
-gpsbabel -i nmn4 -f ${REFERENCE}/route/nmn4-sample.rte -o gpx -F ${TMPDIR}/nmn4-sample.gpx
-compare ${REFERENCE}/route/nmn4-sample.gpx ${TMPDIR}/nmn4-sample.gpx
-gpsbabel -i gpx -f ${REFERENCE}/route/nmn4-sample.gpx -o nmn4 -F ${TMPDIR}/nmn4-sample-out.rte
-compare ${REFERENCE}/route/nmn4-sample-out.rte ${TMPDIR}/nmn4-sample-out.rte
diff --git a/testo.d/pcx.test b/testo.d/pcx.test
deleted file mode 100644 (file)
index 3210970..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
-# PCX (Garmin mapsource import) file format
-rm -f ${TMPDIR}/mm.pcx ${TMPDIR}/pcx.gps
-gpsbabel -i gpx -f ${REFERENCE}/geocaching.gpx -o pcx -F ${TMPDIR}/mm.pcx
-gpsbabel -i pcx -f ${TMPDIR}/mm.pcx -o gpsutil -F ${TMPDIR}/pcx.gps
-compare ${REFERENCE}/gu.wpt ${TMPDIR}/pcx.gps
-gpsbabel -t -i gpx -f ${REFERENCE}/track/tracks.gpx -o pcx -F ${TMPDIR}/pcx.trk
-gpsbabel -t -i pcx -f ${REFERENCE}/track/pcx.trk -o pcx -F ${TMPDIR}/pcx2.trk
-compare ${TMPDIR}/pcx.trk ${TMPDIR}/pcx2.trk 
-# GPSUtil strain - hand crafted, but based on problem report.
-gpsbabel -i pcx -f ${REFERENCE}/gpsutil-1.pcx -o pcx -F ${TMPDIR}/mm-2.pcx
-compare ${TMPDIR}/mm-2.pcx ${TMPDIR}/mm.pcx
diff --git a/testo.d/pocketfms.test b/testo.d/pocketfms.test
deleted file mode 100644 (file)
index d0c9720..0000000
+++ /dev/null
@@ -1,22 +0,0 @@
-#
-# PocketFMS breadcrumb files
-#
-gpsbabel -i pocketfms_bc -f ${REFERENCE}/pocketfms_bc -o gpx,elevprec=6 -F ${TMPDIR}/pocketfms_bc.gpx
-compare ${REFERENCE}/pocketfms_bc.gpx ${TMPDIR}/pocketfms_bc.gpx
-gpsbabel -i gpx -f ${REFERENCE}/pocketfms_bc.gpx -o pocketfms_bc -F ${TMPDIR}/pocketfms_bc
-bincompare ${REFERENCE}/pocketfms_bc.babel ${TMPDIR}/pocketfms_bc
-
-#
-# PocketFMS flightplan files (.xml)
-#
-gpsbabel -i pocketfms_fp -f ${REFERENCE}/pocketfms_fp.xml -o gpx -F ${TMPDIR}/pocketfms_fp.gpx
-compare ${REFERENCE}/pocketfms_fp.gpx ${TMPDIR}/pocketfms_fp.gpx
-
-#
-# PocketFMS waypoints file (.txt)
-#
-gpsbabel -i gpx -f ${REFERENCE}/pocketfms_fp.gpx -o pocketfms_wp -F ${TMPDIR}/pocketfms_wp.txt
-compare ${REFERENCE}/pocketfms_wp.txt ${TMPDIR}/pocketfms_wp.txt
-gpsbabel -i pocketfms_wp -f ${REFERENCE}/pocketfms_wp.txt -o gpx -F ${TMPDIR}/pocketfms_wp.gpx
-compare ${REFERENCE}/pocketfms_wp.gpx ${TMPDIR}/pocketfms_wp.gpx
-
diff --git a/testo.d/skyforce.test b/testo.d/skyforce.test
deleted file mode 100644 (file)
index 68ee355..0000000
+++ /dev/null
@@ -1,16 +0,0 @@
-#
-# Skyforce ascii files
-#
-gpsbabel -i skyforce -f ${REFERENCE}/skyforce_wpt.txt -o gpx -F ${TMPDIR}/skyforce_wpt.gpx
-compare ${REFERENCE}/skyforce_wpt.gpx ${TMPDIR}/skyforce_wpt.gpx
-gpsbabel -i skyforce -f ${REFERENCE}/route/skyforce_rte.txt -o gpx -F ${TMPDIR}/skyforce_rte.gpx
-compare ${REFERENCE}/route/skyforce_rte.gpx ${TMPDIR}/skyforce_rte.gpx
-gpsbabel -i skyforce -f ${REFERENCE}/track/skyforce_trk.txt -o gpx -F ${TMPDIR}/skyforce_trk.gpx
-compare ${REFERENCE}/track/skyforce_trk.gpx ${TMPDIR}/skyforce_trk.gpx
-
-gpsbabel -i skyforce \
-       -f ${REFERENCE}/skyforce_wpt.txt \
-       -f ${REFERENCE}/route/skyforce_rte.txt \
-       -f ${REFERENCE}/track/skyforce_trk.txt -o gpx -F ${TMPDIR}/skyforce.gpx
-compare ${REFERENCE}/skyforce.gpx ${TMPDIR}/skyforce.gpx
-
diff --git a/testo.d/stmsdf.test b/testo.d/stmsdf.test
deleted file mode 100644 (file)
index fa17411..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
-
-#
-# Suunto SDF
-#
-rm -f ${TMPDIR}/stmsdf*
-gpsbabel -i garmin_txt -f ${REFERENCE}/garmin_txt.txt -t -o stmsdf -F ${TMPDIR}/stmsdf-track.sdf -r -o stmsdf,index=2 -F ${TMPDIR}/stmsdf-route.sdf
-compare ${REFERENCE}/track/stmsdf-track.sdf ${TMPDIR}/stmsdf-track.sdf
-compare ${REFERENCE}/route/stmsdf-route.sdf ${TMPDIR}/stmsdf-route.sdf
-gpsbabel -i stmsdf -f ${TMPDIR}/stmsdf-track.sdf -f ${TMPDIR}/stmsdf-route.sdf -o garmin_txt,prec=2 -F ${TMPDIR}/stmsdf.txt
-compare ${REFERENCE}/stmsdf.txt ${TMPDIR}/stmsdf.txt
-
diff --git a/testo.d/stmwpp.test b/testo.d/stmwpp.test
deleted file mode 100644 (file)
index 85a0933..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-
-#
-# STMwpp "Suunto Trek Manager" WaypointPlus format tests
-#
-rm -f ${TMPDIR}/stmwpp-*
-gpsbabel -i stmwpp -f ${REFERENCE}/track/stmwpp-track.txt -o gpx -F ${TMPDIR}/stmwpp-track.gpx
-compare ${REFERENCE}/track/stmwpp-track.gpx ${TMPDIR}/stmwpp-track.gpx
-gpsbabel -i stmwpp -f ${REFERENCE}/route/stmwpp-route.txt -o gpx -F ${TMPDIR}/stmwpp-route.gpx
-compare ${REFERENCE}/route/stmwpp-route.gpx ${TMPDIR}/stmwpp-route.gpx
-gpsbabel -i stmwpp -f ${REFERENCE}/route/stmwpp-route.txt -o stmwpp -F ${TMPDIR}/stmwpp-route.txt
-compare ${REFERENCE}/route/stmwpp-route.txt ${TMPDIR}/stmwpp-route.txt
-
diff --git a/testo.d/tiger.test b/testo.d/tiger.test
deleted file mode 100644 (file)
index c42ea39..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-# Tiger
-# This one is a little tacky, because it's a very lossy format.
-# so we simply test we can write it, and then read it and write it and
-# get an identical file back.
-rm -f ${TMPDIR}/tiger
-gpsbabel -i geo -f ${REFERENCE}/geocaching.loc -o tiger -F ${TMPDIR}/tiger
-gpsbabel -i tiger -f ${TMPDIR}/tiger -o tiger -F ${TMPDIR}/tiger2
-compare ${TMPDIR}/tiger ${TMPDIR}/tiger2
index 7c35f6af7a59ef92f75ec0a347d6fa74e3aa764d..4da67d173775dc0eba0af09c9cef3ce99ced70eb 100644 (file)
@@ -10,10 +10,6 @@ rm -f ${TMPDIR}/ov2.out
 gpsbabel -i geo -f ${REFERENCE}/gl.loc -o tomtom -F ${TMPDIR}/ov2.out
 compare ${REFERENCE}/ov2-geo-out.ref ${TMPDIR}/ov2.out
 
-rm -f ${TMPDIR}/ov2.out
-gpsbabel -i tomtom -f ${REFERENCE}/ov2-geo-out.ref -o gpsutil -F ${TMPDIR}/ov2.out
-compare ${REFERENCE}/ov2-in.ref ${TMPDIR}/ov2.out
-
 # round trip test including CP-1252 conversion
 rm -f ${TMPDIR}/tomtom.gpx
 gpsbabel -i tomtom -f ${REFERENCE}/tomtom.ov2 -o gpx -F ${TMPDIR}/tomtom.gpx
diff --git a/testo.d/vidaone.test b/testo.d/vidaone.test
deleted file mode 100644 (file)
index 039bddf..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-# VidaOne track logs
-gpsbabel -i vidaone -f ${REFERENCE}/track/vidaone.gpb -t -o unicsv -F ${TMPDIR}/vidaone.csv
-compare ${REFERENCE}/track/vidaone.csv ${TMPDIR}/vidaone.csv
-
diff --git a/testo.d/vitosmt.test b/testo.d/vitosmt.test
deleted file mode 100644 (file)
index 1cde9e6..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
-#
-# Vito Navigator II .smt tests
-#
-rm -f ${TMPDIR}/vitosmt*
-gpsbabel    -i vitosmt -f ${REFERENCE}/vitosmt.smt -o gpx -F ${TMPDIR}/vitosmt.gpx
-compare ${REFERENCE}/vitosmt.gpx ${TMPDIR}/vitosmt.gpx
-gpsbabel -t -i vitosmt -f ${REFERENCE}/vitosmt.smt -o gpx -F ${TMPDIR}/vitosmt_t.gpx
-compare ${REFERENCE}/track/vitosmt_t.gpx ${TMPDIR}/vitosmt_t.gpx
-
diff --git a/testo.d/vitovtt.test b/testo.d/vitovtt.test
deleted file mode 100644 (file)
index b1bd7cc..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-#
-# VITO SmartMap .vtt track file 'vitovtt' test
-#
-rm -f ${TMPDIR}/vitovtt-*
-gpsbabel -i vitovtt -f ${REFERENCE}/track/vitovtt-sample.vtt -o gpx -F ${TMPDIR}/vitovtt-sample.gpx
-compare ${REFERENCE}/track/vitovtt-sample.gpx ${TMPDIR}/vitovtt-sample.gpx
diff --git a/testo.d/vpl.test b/testo.d/vpl.test
deleted file mode 100644 (file)
index 247ffcf..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-
-#
-# Basic VPL test
-#
-gpsbabel -i vpl -f ${REFERENCE}/track/vpl_reference.vpl -o gpx -F ${TMPDIR}/vpl_reference.gpx
-compare ${REFERENCE}/track/vpl_reference.gpx ${TMPDIR}/vpl_reference.gpx 
diff --git a/testo.d/wfff.test b/testo.d/wfff.test
deleted file mode 100644 (file)
index 73730f6..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-#
-# Wfff.
-#
-gpsbabel -i wfff -f ${REFERENCE}/wfff.xml -o gpsutil -F ${TMPDIR}/wfff.gpu
-compare ${REFERENCE}/wfff.gpu ${TMPDIR}/wfff.gpu
-
diff --git a/testo.d/yahoo.test b/testo.d/yahoo.test
deleted file mode 100644 (file)
index a5e8bdc..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-
-gpsbabel -i yahoo -f ${REFERENCE}/yahoo.xml -o unicsv -F ${TMPDIR}/yahoo.csv
-compare ${REFERENCE}/yahoo.csv ${TMPDIR}/yahoo.csv
-
diff --git a/tiger.cc b/tiger.cc
deleted file mode 100644 (file)
index a837367..0000000
--- a/tiger.cc
+++ /dev/null
@@ -1,329 +0,0 @@
-/*
-    Access to  U.S. Census Bureau "tiger" format.
-
-    Copyright (C) 2002-2014 Robert Lipe, robertlipe+source@gpsbabel.org
-
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with this program; if not, write to the Free Software
-    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
-
- */
-
-#include "defs.h"
-#include "cet_util.h"
-#include "csv_util.h"
-#include <cmath>
-#include <cstdio>
-#include <cstdlib>
-
-static gbfile* file_in, *file_out;
-static short_handle mkshort_handle;
-static short_handle mkshort_whandle;
-
-#define MYNAME "GPSUTIL"
-
-static double maxlat, maxlon, minlat, minlon;
-static int rec_cnt;
-static char* nolabels = nullptr;
-static char* genurl = nullptr;
-static char* suppresswhite = nullptr;
-static char* iconismarker = nullptr;
-static char* snlen = nullptr;
-
-static char* margin  = nullptr;
-static char* xpixels = nullptr;
-static char* ypixels = nullptr;
-static char* oldthresh = nullptr;
-static char* oldmarker  = nullptr;
-static char* newmarker  = nullptr;
-static char* unfoundmarker  = nullptr;
-
-static int short_length;
-static double thresh_days;
-
-/*
- *   The code bracketed by CLICKMAP is to generate clickable image maps
- *   for a web browser.   It's functional, but is missing the math to do
- *   the projection transformations.   Some trig geek can finish that.
- */
-#if CLICKMAP
-static gbfile* linkf;
-static char* clickmap = NULL;
-#endif
-
-
-static
-QVector<arglist_t> tiger_args = {
-  {
-    "nolabels", &nolabels, "Suppress labels on generated pins",
-    nullptr, ARGTYPE_BOOL, ARG_NOMINMAX, nullptr
-  },
-  {
-    "genurl", &genurl, "Generate file with lat/lon for centering map",
-    nullptr, ARGTYPE_OUTFILE, ARG_NOMINMAX, nullptr
-  },
-  {
-    "margin", &margin, "Margin for map.  Degrees or percentage",
-    "15%", ARGTYPE_FLOAT, ARG_NOMINMAX, nullptr
-  },
-  {
-    "snlen", &snlen, "Max shortname length when used with -s",
-    "10", ARGTYPE_INT, "1", nullptr, nullptr
-  },
-  {
-    "oldthresh", &oldthresh,
-    "Days after which points are considered old",
-    "14", ARGTYPE_INT, ARG_NOMINMAX, nullptr
-  },
-  {
-    "oldmarker", &oldmarker, "Marker type for old points",
-    "redpin", ARGTYPE_STRING, ARG_NOMINMAX, nullptr
-  },
-  {
-    "newmarker", &newmarker, "Marker type for new points",
-    "greenpin", ARGTYPE_STRING, ARG_NOMINMAX, nullptr
-  },
-  {
-    "suppresswhite", &suppresswhite,
-    "Suppress whitespace in generated shortnames",
-    nullptr, ARGTYPE_BOOL, ARG_NOMINMAX, nullptr
-  },
-  {
-    "unfoundmarker", &unfoundmarker, "Marker type for unfound points",
-    "bluepin", ARGTYPE_STRING, ARG_NOMINMAX, nullptr
-  },
-  {
-    "xpixels", &xpixels, "Width in pixels of map",
-    "768", ARGTYPE_INT, ARG_NOMINMAX, nullptr
-  },
-  {
-    "ypixels", &ypixels, "Height in pixels of map",
-    "768", ARGTYPE_INT, ARG_NOMINMAX, nullptr
-  },
-  {
-    "iconismarker", &iconismarker,
-    "The icon description is already the marker", nullptr,
-    ARGTYPE_BOOL, ARG_NOMINMAX, nullptr
-  },
-#if CLICKMAP
-  {
-    "clickmap", &clickmap, "Generate Clickable map web page",
-    NULL, ARGTYPE_BOOL, ARG_NOMINMAX, nullptr
-  },
-#endif
-};
-
-
-static void
-rd_init(const QString& fname)
-{
-  file_in = gbfopen(fname, "rb", MYNAME);
-  mkshort_handle = mkshort_new_handle();
-}
-
-static void
-rd_deinit()
-{
-  gbfclose(file_in);
-  mkshort_del_handle(&mkshort_handle);
-}
-
-static void
-wr_init(const QString& fname)
-{
-  file_out = gbfopen(fname, "w", MYNAME);
-  thresh_days = strtod(oldthresh, nullptr);
-}
-
-static void
-wr_deinit()
-{
-  gbfclose(file_out);
-}
-
-static void
-data_read()
-{
-  double lat,lon;
-  char desc[101];
-  char icon[101];
-  char* ibuf;
-  int line = 0;
-
-  while ((ibuf = gbfgetstr(file_in))) {
-    if ((line++ == 0) && file_in->unicode) {
-      cet_convert_init(CET_CHARSET_UTF8, 1);
-    }
-    if (sscanf(ibuf, "%lf,%lf:%100[^:]:%100[^\n]",
-               &lon, &lat, icon, desc)) {
-      auto* wpt_tmp = new Waypoint;
-
-      wpt_tmp->longitude = lon;
-      wpt_tmp->latitude = lat;
-      wpt_tmp->description = desc;
-      wpt_tmp->shortname = mkshort(mkshort_handle, QString(desc));
-
-      waypt_add(wpt_tmp);
-    }
-  }
-}
-
-static void
-tiger_disp(const Waypoint* wpt)
-{
-  QString pin;
-  double lat = wpt->latitude;
-  double lon = wpt->longitude;
-
-  if (iconismarker) {
-    pin = wpt->icon_descr;
-  } else if (wpt->icon_descr.contains("-unfound")) {
-    pin = unfoundmarker;
-  } else if (wpt->GetCreationTime() > current_time().addSecs(-3600 * 24 * thresh_days)) {
-    pin = newmarker;
-  } else {
-    pin = oldmarker;
-  }
-
-  if (genurl) {
-    if (lat > maxlat) {
-      maxlat = lat;
-    }
-    if (lon > maxlon) {
-      maxlon = lon;
-    }
-    if (lat < minlat) {
-      minlat = lat;
-    }
-    if (lon < minlon) {
-      minlon = lon;
-    }
-  }
-
-  gbfprintf(file_out, "%f,%f:%s", lon, lat, CSTR(pin));
-  if (!nolabels) {
-    QString temp;
-    QString desc = csv_stringclean(wpt->description, ":");
-    if (global_opts.synthesize_shortnames) {
-      temp = desc;
-      desc = mkshort(mkshort_whandle, desc);
-    }
-    gbfprintf(file_out, ":%s", CSTR(desc));
-    if (temp != nullptr) {
-      desc = temp;
-    }
-  }
-  gbfprintf(file_out, "\n");
-}
-
-#if CLICKMAP
-static void
-map_plot(const Waypoint* wpt)
-{
-  static int x,y;
-
-  /* Replace with real math. */
-  x+=10;
-  y+=10;
-
-  gbfprintf(linkf, "<area shape=\"circle\" coords=\"%d,%d,7\" href=\"%s\" alt=\"%s\"\n", x, y, wpt->url, wpt->description);
-}
-#endif /* CLICKMAP */
-
-static double
-dscale(double distance)
-{
-  /*
-   * If we have any specified margin options  factor those in now.
-   * A additional little boundary is helpful because Tiger always
-   * puts the pin above the actual coord and if we don't pad the
-   * top will be clipped.   It also makes the maps more useful to
-   * have a little bit of context around the pins on the border.
-   */
-
-  if (strchr(margin, '%')) {
-    return distance + strtod(margin, nullptr) / 100.0 * distance;
-  } else {
-    return strtod(margin, nullptr) + distance;
-  }
-}
-
-static void
-data_write()
-{
-  maxlat = -9999.0;
-  maxlon = -9999.0;
-  minlat = 9999.0;
-  minlon = 9999.0;
-  rec_cnt = 0;
-
-  short_length = atoi(snlen);
-  mkshort_whandle = mkshort_new_handle();
-
-  if (suppresswhite) {
-    setshort_whitespace_ok(mkshort_whandle, 0);
-  }
-
-  setshort_length(mkshort_whandle, short_length);
-
-  gbfprintf(file_out, "#tms-marker\n");
-  waypt_disp_all(tiger_disp);
-
-  if (genurl) {
-    gbfile* urlf = gbfopen(genurl, "w", MYNAME);
-    double latsz = fabs(maxlat - minlat);
-    double lonsz = fabs(maxlon - minlon);
-
-    /*
-     * Center the map along X and Y axis the midpoint of
-     * our min and max coords each way.
-     */
-    gbfprintf(urlf, "lat=%f&lon=%f&ht=%f&wid=%f",
-              minlat + (latsz/2.0),
-              minlon + (lonsz/2.0),
-              dscale(latsz),
-              dscale(lonsz));
-
-    gbfprintf(urlf, "&iwd=%s&iht=%s", xpixels, ypixels);
-    gbfclose(urlf);
-#if CLICKMAP
-    if (clickmap) {
-      linkf = gbfopen(clickmap, "w", MYNAME);
-      gbfprintf(linkf, "<map name=\"map\">\n");
-      waypt_disp_all(map_plot);
-      gbfprintf(linkf, "</map>\n");
-      gbfclose(linkf);
-      linkf = NULL;
-    }
-#endif
-  }
-
-  mkshort_del_handle(&mkshort_whandle);
-}
-
-
-ff_vecs_t tiger_vecs = {
-  ff_type_file,
-  FF_CAP_RW_WPT,
-  rd_init,
-  wr_init,
-  rd_deinit,
-  wr_deinit,
-  data_read,
-  data_write,
-  nullptr,
-  &tiger_args,
-  CET_CHARSET_ASCII, 0 /* CET-REVIEW */
-  , NULL_POS_OPS,
-  nullptr
-};
index 362d9ea567d096df0d3a155df53e25b131c41927..0d20c15647e42c7330f27ddc861e7753d6e5ae10 100755 (executable)
@@ -7,22 +7,21 @@ EDITOR="${EDITOR:-vim}"
 
 
 remove_word() {
-#  git add $2
-set -x
   # This uses a GNU extension ? for zero or more, letting us match with last
   # entry in a line which has no following whitespace
   $SED -i "s/$1\s*//g" $2
+  git add $2
 }
 
 remove_line_containing() {
-#  git add $2
   $SED -i "/$1/d" $2
+  git add $2
 }
 
 # For things it's easier to just edit away.:1
 remove_manually() {
   grep $1 $2 && $EDITOR +/$1 $2
-  git add $2
+  git add $2
 }
 
 remove_word $1.cc CMakelists.txt
diff --git a/vecs.h b/vecs.h
index e20a7753505faf967fb6854864858804ea31f55c..8a91dd040786c4bbf05b1f04ba7d80c5cd8f8967 100644 (file)
--- a/vecs.h
+++ b/vecs.h
@@ -29,8 +29,8 @@
 
 #include "defs.h"
 #include "dg-100.h"
-#include "format.h"
 #include "energympro.h"
+#include "format.h"
 #include "garmin_fit.h"
 #include "geojson.h"
 #include "ggv_bin.h"
@@ -48,8 +48,6 @@
 #include "subrip.h"
 #include "unicsv.h"
 #include "xcsv.h"
-#include "yahoo.h"
-
 
 extern ff_vecs_t geo_vecs;
 extern ff_vecs_t mag_svecs;
@@ -57,16 +55,12 @@ extern ff_vecs_t mag_fvecs;
 extern ff_vecs_t magX_fvecs;
 extern ff_vecs_t garmin_vecs;
 extern ff_vecs_t gdb_vecs;
-extern ff_vecs_t mapsend_vecs;
 extern ff_vecs_t ozi_vecs;
-extern ff_vecs_t pcx_vecs;
 #if MAXIMAL_ENABLED
-extern ff_vecs_t gpsutil_vecs;
 extern ff_vecs_t holux_vecs;
 extern ff_vecs_t tpg_vecs;
 extern ff_vecs_t tpo2_vecs;
 extern ff_vecs_t tpo3_vecs;
-extern ff_vecs_t tiger_vecs;
 extern ff_vecs_t easygps_vecs;
 extern ff_vecs_t saroute_vecs;
 extern ff_vecs_t navicache_vecs;
@@ -83,31 +77,16 @@ extern ff_vecs_t mtk_locus_vecs;
 #endif // MAXIMAL_ENABLED
 extern ff_vecs_t wbt_svecs;
 #if MAXIMAL_ENABLED
-extern ff_vecs_t vpl_vecs;
 extern ff_vecs_t wbt_fvecs;
 //extern ff_vecs_t wbt_fvecs;
 extern ff_vecs_t hiketech_vecs;
 extern ff_vecs_t glogbook_vecs;
 extern ff_vecs_t vcf_vecs;
 extern ff_vecs_t google_dir_vecs;
-extern ff_vecs_t maggeo_vecs;
 extern ff_vecs_t tomtom_vecs;
 extern ff_vecs_t tef_xml_vecs;
-extern ff_vecs_t vitosmt_vecs;
-extern ff_vecs_t wfff_xml_vecs;
 extern ff_vecs_t bcr_vecs;
 extern ff_vecs_t ignr_vecs;
-#if CSVFMTS_ENABLED
-extern ff_vecs_t stmsdf_vecs;
-#endif // CSVFMTS_ENABLED
-#if CSVFMTS_ENABLED
-extern ff_vecs_t stmwpp_vecs;
-#endif // CSVFMTS_ENABLED
-extern ff_vecs_t nmn4_vecs;
-#if CSVFMTS_ENABLED
-extern ff_vecs_t compegps_vecs;
-#endif // CSVFMTS_ENABLED
-// extern ff_vecs_t yahoo_vecs;
 extern ff_vecs_t gtm_vecs;
 extern ff_vecs_t gpssim_vecs;
 #if CSVFMTS_ENABLED
@@ -116,11 +95,7 @@ extern ff_vecs_t garmin_txt_vecs;
 extern ff_vecs_t gtc_vecs;
 extern ff_vecs_t dmtlog_vecs;
 extern ff_vecs_t raymarine_vecs;
-extern ff_vecs_t vitovtt_vecs;
 extern ff_vecs_t ggv_log_vecs;
-#if CSVFMTS_ENABLED
-extern ff_vecs_t g7towin_vecs;
-#endif // CSVFMTS_ENABLED
 extern ff_vecs_t garmin_gpi_vecs;
 extern ff_vecs_t lmx_vecs;
 extern ff_vecs_t xol_vecs;
@@ -130,9 +105,7 @@ extern ff_vecs_t destinator_poi_vecs;
 extern ff_vecs_t destinator_itn_vecs;
 extern ff_vecs_t destinator_trl_vecs;
 extern ff_vecs_t exif_vecs;
-extern ff_vecs_t vidaone_vecs;
 extern ff_vecs_t igo8_vecs;
-extern ff_vecs_t gopal_vecs;
 extern ff_vecs_t humminbird_vecs;
 extern ff_vecs_t humminbird_ht_vecs;
 extern ff_vecs_t mapasia_tr7_vecs;
@@ -140,24 +113,18 @@ extern ff_vecs_t gnav_trl_vecs;
 extern ff_vecs_t navitel_trk_vecs;
 extern ff_vecs_t ggv_ovl_vecs;
 #if CSVFMTS_ENABLED
-extern ff_vecs_t jtr_vecs;
 #endif // CSVFMTS_ENABLED
 extern ff_vecs_t itracku_vecs;
 extern ff_vecs_t itracku_fvecs;
 extern ff_vecs_t sbp_vecs;
 extern ff_vecs_t sbn_vecs;
 extern ff_vecs_t mmo_vecs;
-extern ff_vecs_t skyforce_vecs;
-extern ff_vecs_t pocketfms_bc_vecs;
-extern ff_vecs_t pocketfms_fp_vecs;
-extern ff_vecs_t pocketfms_wp_vecs;
 extern ff_vecs_t v900_vecs;
 extern ff_vecs_t enigma_vecs;
 extern ff_vecs_t skytraq_vecs;
 extern ff_vecs_t teletype_vecs;
 extern ff_vecs_t skytraq_fvecs;
 extern ff_vecs_t miniHomer_vecs;
-extern ff_vecs_t jogmap_vecs;
 extern ff_vecs_t wintec_tes_vecs;
 extern ff_vecs_t format_garmin_xt_vecs;
 extern ff_vecs_t mapbar_track_vecs;
@@ -263,19 +230,15 @@ private:
   LegacyFormat magX_ffmt {magX_fvecs};
   LegacyFormat garmin_fmt {garmin_vecs};
   LegacyFormat gdb_fmt {gdb_vecs};
-  LegacyFormat mapsend_fmt {mapsend_vecs};
   NmeaFormat nmea_fmt;
   LegacyFormat ozi_fmt {ozi_vecs};
-  LegacyFormat pcx_fmt {pcx_vecs};
   KmlFormat kml_fmt;
 #if MAXIMAL_ENABLED
-  LegacyFormat gpsutil_fmt {gpsutil_vecs};
   LowranceusrFormat lowranceusr_fmt;
   LegacyFormat holux_fmt {holux_vecs};
   LegacyFormat tpg_fmt {tpg_vecs};
   LegacyFormat tpo2_fmt {tpo2_vecs};
   LegacyFormat tpo3_fmt {tpo3_vecs};
-  LegacyFormat tiger_fmt {tiger_vecs};
   LegacyFormat easygps_fmt {easygps_vecs};
   LegacyFormat saroute_fmt {saroute_vecs};
   LegacyFormat navicache_fmt {navicache_vecs};
@@ -295,31 +258,16 @@ private:
 #endif // MAXIMAL_ENABLED
   LegacyFormat wbt_sfmt {wbt_svecs};
 #if MAXIMAL_ENABLED
-  LegacyFormat vpl_fmt {vpl_vecs};
   LegacyFormat wbt_ffmt {wbt_fvecs};
 //LegacyFormat wbt_ffmt {wbt_fvecs};
   LegacyFormat hiketech_fmt {hiketech_vecs};
   LegacyFormat glogbook_fmt {glogbook_vecs};
   LegacyFormat vcf_fmt {vcf_vecs};
   LegacyFormat google_dir_fmt {google_dir_vecs};
-  LegacyFormat maggeo_fmt {maggeo_vecs};
   LegacyFormat tomtom_fmt {tomtom_vecs};
   LegacyFormat tef_xml_fmt {tef_xml_vecs};
-  LegacyFormat vitosmt_fmt {vitosmt_vecs};
-  LegacyFormat wfff_xml_fmt {wfff_xml_vecs};
   LegacyFormat bcr_fmt {bcr_vecs};
   LegacyFormat ignr_fmt {ignr_vecs};
-#if CSVFMTS_ENABLED
-  LegacyFormat stmsdf_fmt {stmsdf_vecs};
-#endif // CSVFMTS_ENABLED
-#if CSVFMTS_ENABLED
-  LegacyFormat stmwpp_fmt {stmwpp_vecs};
-#endif // CSVFMTS_ENABLED
-  LegacyFormat nmn4_fmt {nmn4_vecs};
-#if CSVFMTS_ENABLED
-  LegacyFormat compegps_fmt {compegps_vecs};
-#endif // CSVFMTS_ENABLED
-  YahooFormat yahoo_fmt;
   UnicsvFormat unicsv_fmt;
   LegacyFormat gtm_fmt {gtm_vecs};
   LegacyFormat gpssim_fmt {gpssim_vecs};
@@ -329,11 +277,7 @@ private:
   LegacyFormat gtc_fmt {gtc_vecs};
   LegacyFormat dmtlog_fmt {dmtlog_vecs};
   LegacyFormat raymarine_fmt {raymarine_vecs};
-  LegacyFormat vitovtt_fmt {vitovtt_vecs};
   LegacyFormat ggv_log_fmt {ggv_log_vecs};
-#if CSVFMTS_ENABLED
-  LegacyFormat g7towin_fmt {g7towin_vecs};
-#endif // CSVFMTS_ENABLED
   LegacyFormat garmin_gpi_fmt {garmin_gpi_vecs};
   LegacyFormat lmx_fmt {lmx_vecs};
   RandomFormat random_fmt;
@@ -349,34 +293,24 @@ private:
   LegacyFormat destinator_itn_fmt {destinator_itn_vecs};
   LegacyFormat destinator_trl_fmt {destinator_trl_vecs};
   LegacyFormat exif_fmt {exif_vecs};
-  LegacyFormat vidaone_fmt {vidaone_vecs};
   LegacyFormat igo8_fmt {igo8_vecs};
-  LegacyFormat gopal_fmt {gopal_vecs};
   LegacyFormat humminbird_fmt {humminbird_vecs};
   LegacyFormat humminbird_ht_fmt {humminbird_ht_vecs};
   LegacyFormat mapasia_tr7_fmt {mapasia_tr7_vecs};
   LegacyFormat gnav_trl_fmt {gnav_trl_vecs};
   LegacyFormat navitel_trk_fmt {navitel_trk_vecs};
   LegacyFormat ggv_ovl_fmt {ggv_ovl_vecs};
-#if CSVFMTS_ENABLED
-  LegacyFormat jtr_fmt {jtr_vecs};
-#endif // CSVFMTS_ENABLED
   LegacyFormat itracku_fmt {itracku_vecs};
   LegacyFormat itracku_ffmt {itracku_fvecs};
   LegacyFormat sbp_fmt {sbp_vecs};
   LegacyFormat sbn_fmt {sbn_vecs};
   LegacyFormat mmo_fmt {mmo_vecs};
-  LegacyFormat skyforce_fmt {skyforce_vecs};
-  LegacyFormat pocketfms_bc_fmt {pocketfms_bc_vecs};
-  LegacyFormat pocketfms_fp_fmt {pocketfms_fp_vecs};
-  LegacyFormat pocketfms_wp_fmt {pocketfms_wp_vecs};
   LegacyFormat v900_fmt {v900_vecs};
   LegacyFormat enigma_fmt {enigma_vecs};
   LegacyFormat skytraq_fmt {skytraq_vecs};
   LegacyFormat teletype_fmt {teletype_vecs};
   LegacyFormat skytraq_ffmt {skytraq_fvecs};
   LegacyFormat miniHomer_fmt {miniHomer_vecs};
-  LegacyFormat jogmap_fmt {jogmap_vecs};
   LegacyFormat wintec_tes_fmt {wintec_tes_vecs};
   SubripFormat subrip_fmt;
   LegacyFormat format_garmin_xt_fmt {format_garmin_xt_vecs};
@@ -452,13 +386,6 @@ private:
       "gdb",
       nullptr,
     },
-    {
-      &mapsend_fmt,
-      "mapsend",
-      "Magellan Mapsend",
-      nullptr,
-      nullptr,
-    },
     {
       &nmea_fmt,
       "nmea",
@@ -473,13 +400,6 @@ private:
       nullptr,
       nullptr,
     },
-    {
-      &pcx_fmt,
-      "pcx",
-      "Garmin PCX5",
-      "pcx",
-      nullptr,
-    },
     {
       &kml_fmt,
       "kml",
@@ -488,13 +408,6 @@ private:
       nullptr,
     },
 #if MAXIMAL_ENABLED
-    {
-      &gpsutil_fmt,
-      "gpsutil",
-      "gpsutil",
-      nullptr,
-      nullptr,
-    },
     {
       &lowranceusr_fmt,
       "lowranceusr",
@@ -530,13 +443,6 @@ private:
       "tpo",
       nullptr,
     },
-    {
-      &tiger_fmt,
-      "tiger",
-      "U.S. Census Bureau Tiger Mapping Service",
-      nullptr,
-      nullptr,
-    },
     {
       &easygps_fmt,
       "easygps",
@@ -646,13 +552,6 @@ private:
       nullptr,
     },
 #if MAXIMAL_ENABLED
-    {
-      &vpl_fmt,
-      "vpl",
-      "Honda/Acura Navigation System VP Log File Format",
-      nullptr,
-      nullptr,
-    },
     {
       &wbt_ffmt,
       "wbt-bin",
@@ -695,13 +594,6 @@ private:
       "xml",
       nullptr,
     },
-    {
-      &maggeo_fmt,
-      "maggeo",
-      "Magellan Explorist Geocaching",
-      "gs",
-      nullptr,
-    },
     {
       &tomtom_fmt,
       "tomtom",
@@ -716,20 +608,6 @@ private:
       "xml",
       nullptr,
     },
-    {
-      &vitosmt_fmt,
-      "vitosmt",
-      "Vito Navigator II tracks",
-      "smt",
-      nullptr,
-    },
-    {
-      &wfff_xml_fmt,
-      "wfff",
-      "WiFiFoFum 2.0 for PocketPC XML",
-      "xml",
-      nullptr,
-    },
     {
       &bcr_fmt,
       "bcr",
@@ -744,47 +622,6 @@ private:
       "rdn",
       nullptr,
     },
-#if CSVFMTS_ENABLED
-    {
-      &stmsdf_fmt,
-      "stmsdf",
-      "Suunto Trek Manager (STM) .sdf files",
-      "sdf",
-      nullptr,
-    },
-#endif
-#if CSVFMTS_ENABLED
-    {
-      &stmwpp_fmt,
-      "stmwpp",
-      "Suunto Trek Manager (STM) WaypointPlus files",
-      "txt",
-      nullptr,
-    },
-#endif //  CSVFMTS_ENABLED
-    {
-      &nmn4_fmt,
-      "nmn4",
-      "Navigon Mobile Navigator .rte files",
-      "rte",
-      nullptr,
-    },
-#if CSVFMTS_ENABLED
-    {
-      &compegps_fmt,
-      "compegps",
-      "CompeGPS data files (.wpt/.trk/.rte)",
-      nullptr,
-      nullptr,
-    },
-#endif //CSVFMTS_ENABLED
-    {
-      &yahoo_fmt,
-      "yahoo",
-      "Yahoo Geocode API data",
-      nullptr,
-      nullptr,
-    },
     {
       &unicsv_fmt,
       "unicsv",
@@ -836,13 +673,6 @@ private:
       "rwf",
       nullptr,
     },
-    {
-      &vitovtt_fmt,
-      "vitovtt",
-      "Vito SmartMap tracks (.vtt)",
-      "vtt",
-      nullptr,
-    },
     {
       &ggv_log_fmt,
       "ggv_log",
@@ -850,15 +680,6 @@ private:
       "log",
       nullptr,
     },
-#if CSVFMTS_ENABLED
-    {
-      &g7towin_fmt,
-      "g7towin",
-      "G7ToWin data files (.g7t)",
-      "g7t",
-      nullptr,
-    },
-#endif
     {
       &garmin_gpi_fmt,
       "garmin_gpi",
@@ -964,13 +785,6 @@ private:
       "jpg",
       nullptr,
     },
-    {
-      &vidaone_fmt,
-      "vidaone",
-      "VidaOne GPS for Pocket PC (.gpb)",
-      "gpb",
-      nullptr,
-    },
     {
       &igo8_fmt,
       "igo8",
@@ -978,13 +792,6 @@ private:
       "trk",
       nullptr,
     },
-    {
-      &gopal_fmt,
-      "gopal",
-      "GoPal GPS track log (.trk)",
-      "trk",
-      nullptr,
-    },
     {
       &humminbird_fmt,
       "humminbird",
@@ -1027,15 +834,6 @@ private:
       "ovl",
       nullptr,
     },
-#if CSVFMTS_ENABLED
-    {
-      &jtr_fmt,
-      "jtr",
-      "Jelbert GeoTagger data file",
-      "jtr",
-      nullptr,
-    },
-#endif
     {
       &itracku_fmt,
       "itracku",
@@ -1071,34 +869,6 @@ private:
       "mmo",
       nullptr,
     },
-    {
-      &skyforce_fmt,
-      "skyforce",
-      "Skymap / KMD150 ascii files",
-      nullptr,
-      nullptr,
-    },
-    {
-      &pocketfms_bc_fmt,
-      "pocketfms_bc",
-      "PocketFMS breadcrumbs",
-      nullptr,
-      nullptr,
-    },
-    {
-      &pocketfms_fp_fmt,
-      "pocketfms_fp",
-      "PocketFMS flightplan (.xml)",
-      "xml",
-      nullptr,
-    },
-    {
-      &pocketfms_wp_fmt,
-      "pocketfms_wp",
-      "PocketFMS waypoints (.txt)",
-      "txt",
-      nullptr,
-    },
     {
       &v900_fmt,
       "v900",
@@ -1141,13 +911,6 @@ private:
       nullptr,
       nullptr,
     },
-    {
-      &jogmap_fmt,
-      "jogmap",
-      "Jogmap.de XML format",
-      "xml",
-      nullptr,
-    },
     {
       &wintec_tes_fmt,
       "wintec_tes",
diff --git a/vidaone.cc b/vidaone.cc
deleted file mode 100644 (file)
index d0fa519..0000000
+++ /dev/null
@@ -1,154 +0,0 @@
-/*
-
-    Support for VidaOne GPS for Pocket PC (.gpb) files
-
-    Copyright (C) 2008 Olaf Klein, o.b.klein@gpsbabel.org
-
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with this program; if not, write to the Free Software
-    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
-
- */
-
-/*
-   Simple layout:
-
-struct
-{
-       double dLatitude
-       double dLongitude
-       float fReserved
-};
-*/
-
-#include "defs.h"
-#include <cmath>
-#include <cstdlib>
-
-#define MYNAME "vidaone"
-
-#define VIDAONE_VER    "ver"
-
-static char* vidaone_opt_ver;
-static int vidaone_ver;
-
-static
-QVector<arglist_t> vidaone_args = {
-  {
-    VIDAONE_VER, &vidaone_opt_ver,
-    "Version of VidaOne file to read or write (1 or 2)",
-    "1", ARGTYPE_INT, "1", "2", nullptr
-  },
-};
-
-static gbfile* fin, *fout;
-
-/*******************************************************************************
-* %%%        global callbacks called by gpsbabel main process              %%% *
-*******************************************************************************/
-
-static void
-vidaone_rd_init(const QString& fname)
-{
-  vidaone_ver = atoi(vidaone_opt_ver);
-  fin = gbfopen(fname, "rb", MYNAME);
-}
-
-static void
-vidaone_rd_deinit()
-{
-  gbfclose(fin);
-}
-
-static void
-vidaone_read()
-{
-  route_head* trk = nullptr;
-
-  while (! gbfeof(fin)) {
-    auto* wpt = new Waypoint;
-
-    wpt->latitude = gbfgetdbl(fin);
-    wpt->longitude = gbfgetdbl(fin);
-    if (vidaone_ver >= 2) {
-      wpt->altitude = gbfgetflt(fin);
-    }
-    (void) gbfgetflt(fin);
-
-    /* Only one basic check of data integrity */
-    if ((fabs(wpt->latitude) > 90) || (fabs(wpt->longitude) > 180)) {
-      fatal(MYNAME ": Latitude and/or longitude out of range.\n");
-    }
-
-    if (!trk) {
-      trk = new route_head;
-      track_add_head(trk);
-    }
-
-    track_add_wpt(trk, wpt);
-  }
-}
-
-static void
-vidaone_wr_init(const QString& fname)
-{
-  vidaone_ver = atoi(vidaone_opt_ver);
-  fout = gbfopen(fname, "wb", MYNAME);
-}
-
-static void
-vidaone_wr_deinit()
-{
-  gbfclose(fout);
-}
-
-static void
-vidaone_trkpt(const Waypoint* wpt)
-{
-  gbfputdbl(wpt->latitude, fout);
-  gbfputdbl(wpt->longitude, fout);
-  if (vidaone_ver >= 2) {
-    gbfputflt(wpt->altitude, fout);
-  }
-  gbfputflt(0, fout);
-}
-
-static void
-vidaone_write()
-{
-  track_disp_all(nullptr, nullptr, vidaone_trkpt);
-}
-
-/**************************************************************************/
-
-ff_vecs_t vidaone_vecs = {
-  ff_type_file,
-  {
-    ff_cap_none                        /* waypoints */,
-    (ff_cap)(ff_cap_read | ff_cap_write)       /* tracks */,
-    ff_cap_none                        /* routes */
-  },
-  vidaone_rd_init,
-  vidaone_wr_init,
-  vidaone_rd_deinit,
-  vidaone_wr_deinit,
-  vidaone_read,
-  vidaone_write,
-  nullptr,
-  &vidaone_args,
-  CET_CHARSET_UTF8, 1
-  , NULL_POS_OPS,
-  nullptr
-};
-
-/**************************************************************************/
diff --git a/vitosmt.cc b/vitosmt.cc
deleted file mode 100644 (file)
index fa9288e..0000000
+++ /dev/null
@@ -1,335 +0,0 @@
-/*
-    Read Vito Navigator .SMT tracks
-
-    Copyright (C) 2005 Etienne TASSE
-
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with this program; if not, write to the Free Software
-    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
-
- */
-
-#include "defs.h"
-#include "grtcirc.h"
-#include <cerrno>
-#include <cmath>
-
-#define MYNAME "vitosmt"
-
-static gbfile* infile = nullptr;
-static gbfile* ofs  =nullptr;
-static long count = 0;
-
-const long vitosmt_version = 2;
-const long vitosmt_subversion = 1000;
-const size_t vitosmt_headersize = 24;
-const size_t vitosmt_datasize = 64;
-
-static unsigned char*
-ReadRecord(gbfile* f, gbsize_t size)
-{
-  auto* result = (unsigned char*) xmalloc(size);
-
-  gbfread(result, size, 1, f);
-  return result;
-}
-
-static void
-WriteDouble(void* ptr, double d)
-{
-  unsigned char result[9]="\0\0\0\0\0\0\0\0";
-  le_write_double(result,d);
-  memcpy(ptr, result, 8);
-}
-
-
-static void
-rd_init(const QString& fname)
-{
-  infile = gbfopen_le(fname, "rb", MYNAME);
-}
-
-static void
-rd_deinit()
-{
-  gbfclose(infile);
-}
-
-static void
-vitosmt_read()
-{
-  route_head* rte = nullptr;
-  int serial = 0;
-
-  /*
-   * 24 bytes header
-   */
-  long version = gbfgetint32(infile); /* 2 */
-  long subversion = gbfgetint32(infile); /* 1000 */
-  count = gbfgetint32(infile); /* n */
-  long check1 = gbfgetint32(infile); /* 0 */
-  long check2 = gbfgetint32(infile); /* not sure */
-  (void) check2; // silence warning.
-  long check3 = gbfgetint32(infile); /* n */
-
-  if (version!=vitosmt_version) {
-
-    fatal("%s (%d) reading file.  Unsupported version %ld.%ld\n",
-          MYNAME, __LINE__, version, subversion);
-  }
-
-  if (subversion!=vitosmt_subversion) {
-    warning("%s (%d) reading file.  Unsafe version %ld.%ld\n",
-            MYNAME, __LINE__, version, subversion);
-  }
-
-  if ((count!=check3) ||
-      (check1!=count-1) ||
-      (check3!=count)) {
-
-    fatal("%s (%d) reading file. Invalid file header\n",
-          MYNAME, __LINE__);
-
-  }
-
-  while (count) {
-    /*
-     * 64 bytes of data
-     */
-    if (gbfeof(infile)||gbferror(infile)) {
-      warning("%s (%d) reading file.  Unexpected end of file %s\n",
-              MYNAME, __LINE__, strerror(errno));
-      break;
-    }
-    double latrad = gbfgetdbl(infile); /* WGS84 latitude in radians */
-    double lonrad = gbfgetdbl(infile); /* WGS84 longitude in radians */
-    double elev = gbfgetdbl(infile); /* elevation in meters */
-    unsigned char* timestamp = ReadRecord(infile,5); /* UTC time yr/mo/dy/hr/mi */
-    double seconds = gbfgetdbl(infile); /* seconds */
-    double speed = gbfgetdbl(infile);    /* speed in knots */
-    double course = gbfgetdbl(infile); /* course in degrees */
-    double pdop = gbfgetdbl(infile); /* dilution of precision */
-    unsigned char gpsfix = gbfgetc(infile); /* fix type x08,x10, x20 */
-    unsigned char gpsvalid = gbfgetc(infile); /* fix is valid */
-    unsigned char gpssats = gbfgetc(infile); /* number of sats */
-
-    auto* wpt_tmp = new Waypoint;
-
-    wpt_tmp->latitude = DEG(latrad);
-    wpt_tmp->longitude = DEG(lonrad);
-    wpt_tmp->altitude = elev;
-
-    wpt_tmp->SetCreationTime(QDateTime(
-      QDate(timestamp[0] + 2000, timestamp[1], timestamp[2]),
-      QTime(timestamp[3], timestamp[4]),
-      Qt::UTC).addMSecs(lround(seconds*1000.0)));
-
-    wpt_tmp->shortname = QString::asprintf("WP%04d", ++serial);
-
-    WAYPT_SET(wpt_tmp, speed, KNOTS_TO_MPS(speed)); /* meters per second */
-    WAYPT_SET(wpt_tmp, course, course);
-    wpt_tmp->pdop = pdop;
-
-    /*
-     GPS Fix data
-    */
-    if (gpsvalid&0x7) {
-      if (gpsfix==0) {
-        wpt_tmp->fix  =fix_none;
-      }
-      if (gpsfix&0x8) {
-        wpt_tmp->fix  =fix_2d;
-      } else if (gpsfix&0x10) {
-        wpt_tmp->fix  =fix_3d;
-      } else if (gpsfix&0x20) {
-        wpt_tmp->fix  =fix_dgps;
-      } else {
-        wpt_tmp->fix  =fix_unknown;
-      }
-
-      /* <sat> */
-      wpt_tmp->sat = gpssats;
-    } else {
-      wpt_tmp->fix  =fix_unknown;
-    }
-
-    if (doing_wpts) { /* process as waypoints */
-      waypt_add(wpt_tmp);
-    } else if (doing_rtes) { /* process as route */
-      if (rte == nullptr) {
-          rte = new route_head;
-        route_add_head(rte);
-      }
-      route_add_wpt(rte, wpt_tmp);
-    } else {  /* default track mode */
-      if (rte == nullptr) {
-          rte = new route_head;
-        track_add_head(rte);
-      }
-      track_add_wpt(rte, wpt_tmp);
-    }
-
-    xfree(timestamp);
-
-    count--;
-  }
-}
-
-static void
-wr_init(const QString& fname)
-{
-  warning(MYNAME " write: format is experimental and may crash Vito Navigator II.\n");
-  ofs = gbfopen_le(fname, "wb", MYNAME);
-}
-
-static void
-wr_deinit()
-{
-  gbfclose(ofs);
-
-}
-
-static void
-vitosmt_waypt_pr(const Waypoint* waypointp)
-{
-  size_t  position =0;
-  double  seconds  =0;
-
-  ++count;
-  auto*  workbuffer = (unsigned char*) xcalloc(vitosmt_datasize,1);
-
-  WriteDouble(&workbuffer[position], RAD(waypointp->latitude));
-  position += sizeof(double);
-  WriteDouble(&workbuffer[position], RAD(waypointp->longitude));
-  position += sizeof(double);
-  if (waypointp->altitude-1 > unknown_alt) {
-    WriteDouble(&workbuffer[position], waypointp->altitude);
-  }
-  position += sizeof(double);
-  QDate date(waypointp->GetCreationTime().date());
-  QTime time(waypointp->GetCreationTime().time());
-  workbuffer[position++] = date.year()-100;
-  workbuffer[position++] = date.month();
-  workbuffer[position++] = date.day();
-  workbuffer[position++] = time.hour();
-  workbuffer[position++] = time.minute();
-
-  WriteDouble(&workbuffer[position], seconds);
-  position += sizeof(double);
-
-  /* speed */
-  if (waypointp->speed>0) {
-    WriteDouble(&workbuffer[position], MPS_TO_MPH(waypointp->speed));
-  }
-  position += sizeof(double);
-
-  /* course */
-  if ((waypointp->course>=-360.0)&&(waypointp->course<=360.0)) {
-    WriteDouble(&workbuffer[position], waypointp->course);
-  }
-  position += sizeof(double);
-
-  /* pdop */
-  if (waypointp->pdop>0) {
-    WriteDouble(&workbuffer[position], waypointp->pdop);
-  }
-  position += sizeof(double);
-
-
-  /* fix type */
-  switch (waypointp->fix) {
-  case fix_2d:
-    workbuffer[position++] = 0x08;
-    break;
-  case fix_3d:
-    workbuffer[position++] = 0x10;
-    break;
-  case fix_dgps:
-    workbuffer[position++] = 0x20;
-    break;
-  default:
-    workbuffer[position++] = 0;
-    break;
-  }
-
-  /* Assume position is valid */
-  workbuffer[position++] = 0x07;
-
-  if ((waypointp->sat>0)&&(waypointp->sat<128)) {
-    workbuffer[position++] = waypointp->sat;
-  } else {
-    workbuffer[position++] = 0;
-  }
-
-  (void)gbfwrite(workbuffer,vitosmt_datasize,1,ofs);
-
-  xfree(workbuffer);
-}
-
-
-static void
-vitosmt_write()
-{
-  auto* workbuffer = (unsigned char*) xcalloc(vitosmt_headersize,1);
-
-  count = 0;
-
-  /* leave a spacer for the header */
-  memset(workbuffer,0,vitosmt_headersize);
-  (void)gbfwrite(workbuffer,vitosmt_headersize,1,ofs);
-
-  if (doing_wpts) { /* process as waypoints */
-    waypt_disp_all(vitosmt_waypt_pr);
-  } else if (doing_rtes) { /* process as route */
-    route_disp_all(nullptr, nullptr, vitosmt_waypt_pr);
-  } else { /* default track mode */
-    track_disp_all(nullptr, nullptr, vitosmt_waypt_pr);
-  }
-
-
-  /* write the complete the header */
-  size_t position = 0;
-  le_write32(&workbuffer[position],vitosmt_version);
-  position += sizeof(uint32_t);
-  le_write32(&workbuffer[position],vitosmt_subversion);
-  position += sizeof(uint32_t);
-  le_write32(&workbuffer[position],count);
-  position += sizeof(uint32_t);
-  le_write32(&workbuffer[position],0);
-  position += sizeof(uint32_t);
-  le_write32(&workbuffer[position],count-1);
-  position += sizeof(uint32_t);
-  le_write32(&workbuffer[position],count);
-  position += sizeof(uint32_t);
-
-  gbfrewind(ofs);
-  (void)gbfwrite(workbuffer,vitosmt_headersize,1,ofs);
-
-  xfree(workbuffer);
-}
-
-ff_vecs_t vitosmt_vecs = {
-  ff_type_file,
-  FF_CAP_RW_ALL,
-  rd_init,
-  wr_init,
-  rd_deinit,
-  wr_deinit,
-  vitosmt_read,
-  vitosmt_write,
-  nullptr,
-  nullptr,
-  CET_CHARSET_UTF8, 1 /* do nothing | CET-REVIEW */
-  , NULL_POS_OPS,
-  nullptr
-};
diff --git a/vitovtt.cc b/vitovtt.cc
deleted file mode 100644 (file)
index a1fc2ad..0000000
+++ /dev/null
@@ -1,127 +0,0 @@
-/*
-    Read Vito SmartMap .vtt tracks
-
-    Copyright (C) 2007 Jeremy Ehrhardt, jeremye@caltech.edu
-
-based on vitostc.c, which is
-Copyright (C) 2005 Etienne TASSE
-
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with this program; if not, write to the Free Software
-    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
-
- */
-
-#include "defs.h"
-#include <cmath>
-
-#define MYNAME "vitovtt"
-
-#define TM_YEAR_ZERO 1900
-#define TM_MONTH_ZERO 1
-
-static gbfile* infile = nullptr;
-static int count = 0;
-
-static const int vitovtt_version = 3;
-// static const size_tvitovtt_headersize = 16;
-// static const size_tvitovtt_datasize = 32;
-
-static const double vitovtt_latitudescale = 20000000.0;
-static const double vitovtt_longitudescale = 10000000.0;
-static const int vitovtt_secondscale = 30000000;
-static const int vitovtt_microsecondscale = 30;
-
-static void
-rd_init(const QString& fname)
-{
-  infile = gbfopen_le(fname, "rb", MYNAME);
-}
-
-static void
-rd_deinit()
-{
-  gbfclose(infile);
-}
-
-static void
-vitovtt_read()
-{
-  struct tm tmStruct;
-
-  memset(&tmStruct, 0, sizeof(tmStruct));
-
-  auto* rte = new route_head;
-  track_add_head(rte);
-
-  /* Read the header. */
-  int version = gbfgetint32(infile);
-  count = gbfgetint32(infile);
-
-  if (version != vitovtt_version) {
-    fatal("%s (%d) reading file.  Unsupported version %d\n",
-          MYNAME, __LINE__, version);
-  }
-
-  while (count) {
-    /* Read an entry. */
-    int scaled_lat = gbfgetint32(infile);
-    int scaled_lon = gbfgetint32(infile);
-    double altitude = gbfgetflt(infile);
-    tmStruct.tm_year = gbfgetint16(infile) - TM_YEAR_ZERO;
-    tmStruct.tm_mon = gbfgetc(infile) - TM_MONTH_ZERO;
-    tmStruct.tm_mday = gbfgetc(infile);
-    tmStruct.tm_hour = gbfgetc(infile);
-    tmStruct.tm_min = gbfgetc(infile);
-    int scaled_sec = gbfgetint32(infile);
-    double speed = gbfgetflt(infile);
-    int course = gbfgetint16(infile);
-    int status = gbfgetint32(infile);
-
-    auto* wpt_tmp = new Waypoint;
-
-    wpt_tmp->latitude= scaled_lat / vitovtt_latitudescale;
-    wpt_tmp->longitude= scaled_lon / vitovtt_longitudescale;
-    wpt_tmp->altitude= altitude;
-
-    tmStruct.tm_sec = scaled_sec / vitovtt_secondscale;
-    int microseconds = (scaled_sec % vitovtt_secondscale) / vitovtt_microsecondscale;
-    wpt_tmp->SetCreationTime(mkgmtime(&tmStruct), lround(microseconds/1000.0));
-    /*
-     * TODO: interpret speed, course, status
-     */
-    (void) speed;
-    (void) course;
-    (void) status;
-
-    track_add_wpt(rte, wpt_tmp);
-
-    count--;
-  }
-}
-
-ff_vecs_t vitovtt_vecs = {
-  ff_type_file,
-  { ff_cap_none, ff_cap_read, ff_cap_none },
-  rd_init,
-  nullptr,
-  rd_deinit,
-  nullptr,
-  vitovtt_read,
-  nullptr,
-  nullptr,
-  nullptr,
-  CET_CHARSET_UTF8, 1/* do nothing | CET-REVIEW */
-  , NULL_POS_OPS,
-  nullptr
-};
diff --git a/vpl.cc b/vpl.cc
deleted file mode 100644 (file)
index 1a1efa7..0000000
--- a/vpl.cc
+++ /dev/null
@@ -1,230 +0,0 @@
-/*
-
-    Reader for Honda/Acura (Alpine) Navigation System VP Log (VPL) files
-
-       Copyright (C) 2009      Chris Tracy, gpsbabel@adiemus.org
-    Copyright (C) 2005  Robert Lipe, robertlipe+source@gpsbabel.org
-
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with this program; if not, write to the Free Software
-    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
-
-*/
-
-/*
-       With logging enabled (Diagnostic Menu | Functional Setup | Log Data), VPL
-       files are written to the PC Card.  The files themselves are written out as
-       ASCII files, mostly containing lines of hexadecimal characters.  The format
-       seems similar to NMEA, with various sentences carrying different types of
-       information.  For our purposes, the only sentence that matters is the '75'
-       sentence.  For example:
-
-75700241FA59FB242CD500CF041984991E0B0A0C09060613064509060613064424824D68FF00000800051C000271
-00--1111111122222222333344445555--667788999999999999AAAAAAAAAAAA--------------------------XX
-
-0 - Sentence type
-1 - Latitude in hex (signed, divide by 0xE1000 for decimal degrees)
-       0241FA59 -> 37878361 / 0xE1000 = 41.100652
-2 - Longitude in hex (signed, divide by 0xE1000 for decimal degrees)
-       FB242CD5 -> -81515307 / 0xE1000 = -88.449769
-3 - Altitude (signed, meters)
-       00CF -> 207
-4 - Speed (divide by 0x10 for MPH)
-       0419 -> 1049 / 0x10 = 65.5625
-5 - Heading (multiply by 360/65535 to constrain to 0 - 360 degrees)
-       8499 -> 33945 * (360/65535) = 186.47
-6 - Number of sats
-       0B -> 11
-7 - HDOP (divide by 8)
-       0A -> 10 / 8 = 1.25
-8 - VDOP (divide by 8)
-       0C -> 12 / 8 = 1.5
-9 - Date and Time (YYMMDDHHMMSS)
-       090606130645 = June 6, 2009 13:06:45
-A - Previous line date and time (?)
-       090606130644 = June 6, 2009 13:06:44
-X - Checksum (xor, ala NMEA)
-
-***********************************
-* Unused, but (at least partially) decoded sentences
-
-******
-0D - Yaw Gyro (This field is not currently decoded herein)
-       This field is written 25 times per second.  It contains the raw values
-       from the yaw gyro.  Positive values for right turns, negative values
-       for left turns.
-
-0D00FEFA09
-00??1111CC
-
-0 - Sentence Type
-? - An unknown field with observed values between 0 and 3.
-1 - Yaw Gyro value
-C - Checksum
-
-******
-31 - Distance Traveled
-       This field is written once a second.  It contains the number of
-       meters traveled since the navigation system was last turned on.
-
-310000117050
-0011111111CC
-
-0 - Sentence Type
-1 - Distance Traveled in Meters
-C - Checksum
-
-******
-35 - Raw Position
-       This field is written 5 times per second.  It contains Latitude
-       and Longitude, as well as two currently unknown angular values.
-
-35CFBB5CBC1744CB1BD9023308C2
-00111111112222222233334444CC
-
-0 - Sentence Type
-1 - Longitude (divide by 0x8CA000 for decimal degrees)
-2 - Latitude (divide by 0x8CA000 for decimal degrees)
-3 - Unknown angular value (multiply by 360/65535)
-4 - Unknown angular value (multiply by 360/65535)
-C - Checksum
-
-*/
-
-/*
-       TODO:
-               - Implement checksum verification
- */
-
-#include "defs.h"
-#include <cstdio> /* for sscanf */
-
-#define MYNAME "vpl"
-
-static void vpl_parse_75_sentence(const char*);
-
-static
-QVector<arglist_t> vpl_args = {
-};
-
-static gbfile* vpl_file_in;
-static route_head* track_head;
-
-/*******************************************************************************
-* %%%        global callbacks called by gpsbabel main process              %%% *
-*******************************************************************************/
-
-static void
-vpl_rd_init(const QString& fname)
-{
-  vpl_file_in = gbfopen(fname, "r", MYNAME);
-}
-
-static void
-vpl_rd_deinit()
-{
-  gbfclose(vpl_file_in);
-}
-
-static void
-vpl_read()
-{
-  char* ibuf;
-
-  // Set up a track
-  if (track_head == nullptr) {
-    track_head = new route_head;
-    track_add_head(track_head);
-  }
-
-  while ((ibuf = gbfgetstr(vpl_file_in))) {
-    if (strncmp(ibuf, "75", 2) == 0) {
-      vpl_parse_75_sentence(ibuf);
-    }
-  }
-}
-
-/*******************************************************************************
-* Local Functions
-*******************************************************************************/
-
-void
-vpl_parse_75_sentence(const char* ibuf)
-{
-  uint32_t ymd, hms;
-  int32_t lat_raw, lon_raw;
-  int16_t alt, speed_raw;
-  uint16_t hdg_raw;
-  uint8_t sats, hdop_raw, vdop_raw;
-  struct tm tm;
-
-  // The files have DOS line endings (CR/LF) but we don't care, because we
-  // don't read to the end.
-  sscanf(ibuf, "75%*2c%8X%8X%4hX%4hX%4hX%*2c%2hhX%2hhX%2hhX%6u%6u",
-         &lat_raw, &lon_raw, &alt, &speed_raw, &hdg_raw, &sats, &hdop_raw, &vdop_raw,
-         &ymd, &hms);
-
-  tm.tm_sec = hms % 100;
-  hms /= 100;
-  tm.tm_min = hms % 100;
-  hms /= 100;
-  tm.tm_hour = hms % 100;
-
-  tm.tm_mday = ymd % 100;
-  ymd /= 100;
-  tm.tm_mon = ymd % 100;
-  ymd /= 100;
-  tm.tm_year = ymd % 100 + 100;
-
-  auto* waypt = new Waypoint;
-
-  // Lat/Lon are both stored *0xE1000 which we have to divide out
-  // for decimal degrees
-  waypt->latitude  = lat_raw / (double) 0xE1000;
-  waypt->longitude = lon_raw / (double) 0xE1000;
-  waypt->altitude  = alt;
-  waypt->sat       = sats;
-  // Speed comes in (MPH x 0x10) which we have to convert to m/s
-  WAYPT_SET(waypt, speed, (speed_raw / (double) 0x10) * 0.44704);
-  WAYPT_SET(waypt, course, hdg_raw * (360.0f/65535.0f));
-  waypt->hdop      = hdop_raw / 8.0;
-  waypt->vdop      = vdop_raw / 8.0;
-
-  waypt->SetCreationTime(mkgmtime(&tm));
-
-  track_add_wpt(track_head, waypt);
-}
-
-/**************************************************************************/
-
-ff_vecs_t vpl_vecs = {
-  ff_type_file,
-  {
-    ff_cap_none                /* waypoints */,
-    ff_cap_read                /* tracks */,
-    ff_cap_none                /* routes */
-  },
-  vpl_rd_init,
-  nullptr,
-  vpl_rd_deinit,
-  nullptr,
-  vpl_read,
-  nullptr,
-  nullptr,
-  &vpl_args,
-  CET_CHARSET_ASCII, /* ascii is the expected character set */
-  1                   /* fixed, can't be changed through command line parameter */
-  , NULL_POS_OPS,
-  nullptr
-};
-/**************************************************************************/
diff --git a/wfff_xml.cc b/wfff_xml.cc
deleted file mode 100644 (file)
index 3f082d7..0000000
+++ /dev/null
@@ -1,240 +0,0 @@
-/*
-    Copyright (C) 2006 Etienne Tasse   etasse@yahoo.com
-
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with this program; if not, write to the Free Software
-    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
-
- */
-
-#include "defs.h"
-#include "xmlgeneric.h"
-#include <QXmlStreamAttributes>
-#include <cstdio>
-
-/* argument storage */
-static char*   aicicon =nullptr;
-static char*   aioicon =nullptr;
-static char*   ahcicon =nullptr;
-static char*   ahoicon =nullptr;
-static char*   snmac   =nullptr;
-
-static
-QVector<arglist_t> wfff_xml_args = {
-  {
-    "aicicon", &aicicon, "Infrastructure closed icon name",
-    "Red Square", ARGTYPE_STRING, ARG_NOMINMAX, nullptr
-  },
-  {
-    "aioicon", &aioicon, "Infrastructure open icon name",
-    "Green Square", ARGTYPE_STRING, ARG_NOMINMAX, nullptr
-  },
-  {
-    "ahcicon", &ahcicon, "Ad-hoc closed icon name",
-    "Red Diamond", ARGTYPE_STRING, ARG_NOMINMAX, nullptr
-  },
-  {
-    "ahoicon", &ahoicon, "Ad-hoc open icon name",
-    "Green Diamond", ARGTYPE_STRING, ARG_NOMINMAX, nullptr
-  },
-  {"snmac", &snmac, "Shortname is MAC address", nullptr, ARGTYPE_BOOL, ARG_NOMINMAX, nullptr },
-};
-
-#define xfreez(p) { if (p) xfree(p); p=0; }
-
-#define MYNAME "wfff_xml"
-
-static xg_callback     wfff_s,      wfff_e;
-static xg_callback     wfff_wep,    wfff_mac,    wfff_type;
-static xg_callback     wfff_ssid,   wfff_chan;
-static xg_callback     wfff_mnrssi, wfff_mxrssi;
-static xg_callback     wfff_first,  wfff_last;
-static xg_callback     wfff_hdop,   wfff_lat,    wfff_lon;
-
-static
-xg_tag_mapping loc_map[] = {
-  { wfff_s,            cb_start,       "/DocumentElement/AP"                   },
-  { wfff_e,            cb_end,         "/DocumentElement/AP"                   },
-  { wfff_wep,  cb_cdata,       "/DocumentElement/AP/WEP"               },
-  { wfff_mac,  cb_cdata,       "/DocumentElement/AP/MAC"               },
-  { wfff_ssid,         cb_cdata,       "/DocumentElement/AP/SSID"              },
-  { wfff_type,         cb_cdata,       "/DocumentElement/AP/Type"              },
-  { wfff_mnrssi,       cb_cdata,       "/DocumentElement/AP/MinRSSI"   },
-  { wfff_mxrssi,       cb_cdata,       "/DocumentElement/AP/MaxRSSI"   },
-  { wfff_chan,         cb_cdata,       "/DocumentElement/AP/Channel"   },
-  { wfff_first,        cb_cdata,       "/DocumentElement/AP/FirstSeen" },
-  { wfff_last,         cb_cdata,       "/DocumentElement/AP/LastSeen"  },
-  { wfff_hdop,         cb_cdata,       "/DocumentElement/AP/HDOP"              },
-  { wfff_lat,  cb_cdata,       "/DocumentElement/AP/Lat"               },
-  { wfff_lon,  cb_cdata,       "/DocumentElement/AP/Lon"               },
-  { nullptr,(xg_cb_type)0,nullptr }
-};
-
-/* work variables for wfff_xxx */
-static QString ap_mac;
-static QString ap_ssid;
-static QString ap_type;
-static QString ap_wep;
-static int             ap_chan         =0;
-static time_t  ap_first        =0;
-static QString         ap_last;
-static float   ap_mnrssi       =0.0;
-static float   ap_mxrssi       =0.0;
-static float   ap_hdop         =0.0;
-static double  ap_lat          =0.0;
-static double  ap_lon          =0.0;
-
-/*     Start of AP block */
-void wfff_s(xg_string, const QXmlStreamAttributes*)
-{
-  ap_mnrssi=0.0;
-  ap_mxrssi=0.0;
-  ap_chan=0;
-  ap_hdop=0.0;
-  ap_first=0;
-  ap_last=QString();
-  ap_lat=0.0;
-  ap_lon=0.0;
-}
-
-void wfff_mac(const QString& args, const QXmlStreamAttributes*) {
-  ap_mac = args;
-}
-void wfff_ssid(const QString& args, const QXmlStreamAttributes*) {
-  ap_ssid = args;
-}
-void wfff_type(const QString& args, const QXmlStreamAttributes*) {
-  ap_type = args;
-}
-void wfff_mnrssi(const QString& args, const QXmlStreamAttributes*) {
-  ap_mnrssi = args.toDouble();
-}
-void wfff_mxrssi(const QString& args, const QXmlStreamAttributes*) {
-  ap_mxrssi = args.toDouble();
-}
-void wfff_chan(const QString& args, const QXmlStreamAttributes*) {
-  ap_chan = args.toInt();
-}
-void wfff_first(const QString& args, const QXmlStreamAttributes*) {
-  ap_first = xml_parse_time(args).toTime_t();
-}
-void wfff_last(const QString& args, const QXmlStreamAttributes*) {
-  ap_last = args;
-}
-void wfff_wep(const QString& args, const QXmlStreamAttributes*) {
-  ap_wep = args;
-}
-void wfff_hdop(const QString& args, const QXmlStreamAttributes*) {
-  ap_hdop = args.toDouble();
-}
-void wfff_lat(const QString& args, const QXmlStreamAttributes*) {
-  ap_lat = args.toDouble();
-}
-void wfff_lon(const QString& args, const QXmlStreamAttributes*) {
-  ap_lon = args.toDouble();
-}
-
-/*     End of AP Block, set waypoint and add */
-static long tosscount=0;
-
-void wfff_e(xg_string, const QXmlStreamAttributes*)
-{
-  char         desc[255]       ="\0";
-
-  if ((ap_hdop>=1)&&(ap_hdop<50)) { // Discard invalid GPS fix
-    auto*      wpt_tmp = new Waypoint;
-
-    if (snmac) {
-      wpt_tmp->shortname = ap_mac;
-    } else {
-      wpt_tmp->shortname = ap_ssid;
-    }
-
-    snprintf(desc, sizeof desc,
-             "%s/%s/WEP %s/Ch %d/%2.0fdB/%2.0fdB/%s",
-             snmac?CSTR(ap_ssid):CSTR(ap_mac), CSTR(ap_type), CSTR(ap_wep),
-             ap_chan, ap_mnrssi, ap_mxrssi, CSTR(ap_last));
-    wpt_tmp->description = desc;
-
-    wpt_tmp->latitude = ap_lat;
-    wpt_tmp->longitude = ap_lon;
-    wpt_tmp->hdop = ap_hdop;
-    wpt_tmp->altitude = unknown_alt;
-    wpt_tmp->fix = fix_unknown;
-
-    QString ap_wep_(ap_wep);
-    QString ap_type_(ap_type);
-    if (ap_wep_.startsWith("on", Qt::CaseInsensitive)) {
-      if (ap_type_.startsWith("AP", Qt::CaseInsensitive)) {
-        wpt_tmp->icon_descr = aicicon; /* Infra Closed */
-      } else {
-        wpt_tmp->icon_descr = ahcicon; /* AdHoc Closed */
-      }
-    } else {
-      if (ap_type_.startsWith("AP", Qt::CaseInsensitive)) {
-        wpt_tmp->icon_descr = aioicon; /* Infra Open */
-      } else {
-        wpt_tmp->icon_descr = ahoicon; /* AdHoc Open */
-      }
-    }
-
-    wpt_tmp->SetCreationTime(ap_first);
-
-    waypt_add(wpt_tmp);
-
-  } else {
-    tosscount++;
-  }
-}
-
-static void
-wfff_xml_rd_init(const QString& fname)
-{
-  tosscount = 0;
-
-  xml_init(fname, loc_map, nullptr);
-}
-
-void
-static wfff_xml_read()
-{
-  xml_read();
-}
-
-void
-static wfff_xml_rd_deinit()
-{
-  xml_deinit();
-
-  if (tosscount) {
-    warning("Warning: %s reading file. Threw away %ld invalid entries.\n",
-            MYNAME, tosscount);
-  }
-
-}
-
-ff_vecs_t wfff_xml_vecs = {
-  ff_type_file,
-  {ff_cap_read, ff_cap_none, ff_cap_none},
-  wfff_xml_rd_init,
-  nullptr,
-  wfff_xml_rd_deinit,
-  nullptr,
-  wfff_xml_read,
-  nullptr,
-  nullptr,
-  &wfff_xml_args,
-  CET_CHARSET_UTF8, 0,
-  NULL_POS_OPS,
-  nullptr
-};
index 6805a588707efa6cd5f313a40739ebd39d217747..174ec7386bc52c9383a04bc6d009aa077978cbbb 100644 (file)
@@ -8,12 +8,9 @@
 These values are also used internally by the
 
     <link linkend="fmt_gdb">GDB</link>
-    ,
-
-    <link linkend="fmt_bcr">BCR</link>
     , and
 
-    <link linkend="fmt_pcx">PCX</link>
+    <link linkend="fmt_bcr">BCR</link>
 
     formats.</para>
   <simplelist columns="5">
index 917212aaad4eab49a99ba7dffeefb9f83a163396..695355d5fd7fd63ec1472c60d66facee7253eceb 100644 (file)
@@ -20,7 +20,7 @@ You've collected a list of your favorite locations as waypoints and you'd
 like to be able to share them.  Unfortunately, his copy of
          <link linkend="fmt_gdb">Garmin Mapsource</link>
          won't read data created by your copy of
-         <link linkend="fmt_mapsend">Magellan Mapsend DirectRoute</link>
+         <link linkend="fmt_tpg">National Geographic Topo</link>
          .  What you need
 is a program that converts data between the two programs.</para>
       <para>GPSBabel actually solves that problem for you and much more...
@@ -43,4 +43,4 @@ that it was easy to add new formats and made the program freely available.
          <link linkend="Styles">style</link>
          mechanism.</para>
    </section>
-</preface>
\ No newline at end of file
+</preface>
diff --git a/xmldoc/formats/compegps.xml b/xmldoc/formats/compegps.xml
deleted file mode 100644 (file)
index 2500342..0000000
+++ /dev/null
@@ -1,16 +0,0 @@
-<para>
-CompeGPS data files are those read and written by the
-<productname>CompeGPS</productname> TwoNav software (running on a Mac, a PC,
-or on select cell phones) as well as  CompeGPS Land, and CompeGPS Air.  
-These files are also used by the CompeGPS TwoNav Aventura and TwoNav Sportiva GPS receivers when they are in mass storage mode.
-</para>
-
-<para>
-Release 6.1 of CompeGPS Land and CompeGPS Air added GPX as an import export format for waypoints, routes, and tracks.   As GPX is a more heavily used format, you should probably use that for new applications.
-</para>
-
-<para> 
-For more information please see
-<ulink url="http://www.compegps.com">http://www.compegps.com</ulink>
-</para>
-    
diff --git a/xmldoc/formats/g7towin.xml b/xmldoc/formats/g7towin.xml
deleted file mode 100644 (file)
index db734eb..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
-<para>
-  Like GPSBabel, <ulink url="http://www.gpsinformation.org/ronh/g7towin.htm">G7ToWin</ulink> is a program which allows uploading and
-  downloading information from several GPS devices (Garmin, Lowrance/Eagle, Magellan).
-  G7ToWin has its own data format, which is an enhanced format used in Gardown.
-</para>
-
-<para>
-  This format can read both file types, G7ToWin (.g7t) and Gardown (.gdn).
-</para>
diff --git a/xmldoc/formats/gopal.xml b/xmldoc/formats/gopal.xml
deleted file mode 100644 (file)
index 49f73d0..0000000
+++ /dev/null
@@ -1,43 +0,0 @@
-<para>
-  The gopal format is a track format written by the
- <ulink url="http://www.mediongopal.de/">GoPal Navigation</ulink> program. 
-</para>
-
-<para>
-  The format of the file itself is quite simple:</para>
-    <para>
-      <programlisting>
-        Fileformat GoPal
-        TICK;   TIME UTC; LONG;    LAT;       HEIGHT; SPEED km/h;  FIX; HDOP;     SAT
-        3801444, 080558, 2.944362, 43.262117, 295.28, 0.12964, 2, 2.900000, 3
-      </programlisting>
-
-Filenames are automatically created by the device as follows:
-      <programlisting>
-        trackYYYYMMDD_HHMMSS.trk  </programlisting>
-      and/or, depending on software version and settings:
-      <programlisting>
-               A_YYYYMMDD_HHMMSS.trk
-              </programlisting>
-       with HHMMSS local time (not UTC!)
-      </para> 
-      <para> 
-The file format lacks the correct date value for each trackpoint, so it has to be computed starting from the
-date given in the filename. To handle files without a parsable date in the
-name, the command line option 'date' is provided.
-</para>
-<para>
-Conversions from gopal into any other format are a bit lossy concerning the first field of each line which looks like an useless time tick value
-and is simply discarded while reading. If written, there will be a time_t value from the current (computed) timestamp.
-</para>
-<para>
-Somewhere around Gopal 4.8 or 5.0, Electrobit added three more fields to the end of this format.  They are, in order, date (which eliminates most of the silliness above), an unknown field, and a bearing.   GPSBabel now reads the date and ignores the other two.  We don't yet write these three fields for compatibility with earlier versions.
-</para>
-<para>
-
-Filtering out invalid data points is handled by the options 'clean', 'minspeed' and 'maxspeed'.
-For each datapoint the speed needed to come the from the last valid point is
-calculated and compared with the limits.
-Thus one cat easily discard unreliable points.
-
-         </para>
diff --git a/xmldoc/formats/gpsman.xml b/xmldoc/formats/gpsman.xml
deleted file mode 100644 (file)
index b1b0a6e..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
-
-      
-      
-       <para> <ulink url="http://www.ncc.up.pt/gpsman/">GPS Manager</ulink> 
-can read and write formats GPSBabel doesn't understand.  The format defaults
-(WGS84, DDD) work reliably.  Tracks, routes, and non-default format options
-are not supported.
-       </para>
-
-       <para>This format is documented at the GPS Manager 
-       <ulink url="http://www.ncc.up.pt/gpsman/gpsmanhtml/manual/html/GPSMandoc_30.html">doc site</ulink>.
-       </para>
-    
diff --git a/xmldoc/formats/gpsutil.xml b/xmldoc/formats/gpsutil.xml
deleted file mode 100644 (file)
index d39bd8d..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-
-      
-      
-      <para>The format we call <ulink url="http://www.cs.uakron.edu/~hennings/gpsutil">gpsutil</ulink> is a simple file format used by a program that runs
-on POSIX- compliant OSes like UNIX and Linux.  Reads and writes of
-this format are very reliable.  (<ulink url="/people/robertlipe.html">The lead
-developer of GPSBabel</ulink> also contributed to this that 'gpsutil' 
-the early days.)</para>
-<para>
-       Note that 'gpsutil' is a different format - and program - than the one called <ulink url="http://www.gpsu.co.uk/index.html">GPS Utility</ulink>; for that one, you should probably use our  <link linkend="fmt_pcx">PCX module</link>.
-</para>
-    
diff --git a/xmldoc/formats/jogmap.xml b/xmldoc/formats/jogmap.xml
deleted file mode 100644 (file)
index 0ce2666..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-<para>
- This read-only format reads the XML marker files from <ulink url="http://jogmap.de"> Jogmap</ulink> as tracks.  Each "markers" entry is a new track with each "marker" entry being a trackpoint.
-</para>
diff --git a/xmldoc/formats/jtr.xml b/xmldoc/formats/jtr.xml
deleted file mode 100644 (file)
index 0d39be4..0000000
+++ /dev/null
@@ -1,28 +0,0 @@
-<para>
-   From the <ulink url="http://www.geotagger.co.uk/files/JTR_Format.pdf">file format description</ulink>:
-</para>
-<para>
-   The JTR file format is used by the Jelbert GeoTagger device to record
-   location information relating to where photographs have been taken.
-   One record entry is created for each press of the shutter on the
-   camera.
-</para>
-<para>
-   The JTR file format will be updated in the future so it is important to
-   check for the current version ID within the file that is present at the
-   beginning of each line of data. It is currently “GEOTAG2”
-</para>
-<para>
-   Each line of the JTR file currently starts with the word “GEOTAG2”
-   followed by a comma and then two NMEA sentences separated by a
-   comma character with a CR at the end. The $GPRMC (date, time and
-   position) data is followed by the $HCHDG (magnetic compass) data.
-</para>
-<para>
-   Although the $GPRMC data segment contains a compass bearing, this
-   should be ignored unless the $HCHDG compass direction is null which
-   can happen if the electronic compass is switched off. Use the magnetic
-   compass bearing in preference to the GPS derived compass.
-   The two NMEA checksums can be ignored for the time being.
-</para>
-
diff --git a/xmldoc/formats/maggeo.xml b/xmldoc/formats/maggeo.xml
deleted file mode 100644 (file)
index 1ec1461..0000000
+++ /dev/null
@@ -1,19 +0,0 @@
-<para> 
-  This format supports the on-card format used by the 
-  <ulink url="http://www.magellangps.com">Magellan</ulink> Explorist 400,
-  Explorist 500, Explorist 600, Explorist 210, and Explorist XL 
-  to describe geocaches.  Notice what while the format can
-  hold an infinite number of geocaches, the unit will read and silently
-  discard all but 200 geocache POIs at a time.</para>
-<para>
-  You should name any file created with this format with a ".gs" extension 
-  so the firmware can read it.
-</para>
-<para>
-  This format does support reading .gs files, but it's kind of a 
-  pointless operation as the units can't create or edit these files.  
-  Round-tripped data is lossy for all but the most trivial cases as
-  many fields are shortened or discarded on write.  "Date last found" is
-  discarded on read as there are no logs stored on the device in which to
-  store the date last found.
-</para>
diff --git a/xmldoc/formats/mapsend.xml b/xmldoc/formats/mapsend.xml
deleted file mode 100644 (file)
index 853a3b7..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
-<para>
-  This format supports the 
-  <ulink url="http://www.magellangps.com">Magellan</ulink>
-  <productname>MapSend</productname> native file format.
-</para>
-<para>
-  Kudos to Magellan for having the foresight to document their file formats,
-  making software like this possible.
-</para>
diff --git a/xmldoc/formats/nmn4.xml b/xmldoc/formats/nmn4.xml
deleted file mode 100644 (file)
index 8442ccb..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-
-      
-      
-      <para>Support for Navigon Mobile Navigator route (.rte) files.
-This is a very simple text format that only requires coordinates, but
-has fields for many other things.  We only write coordinates as fields
-like 'city' and 'street' cannot typically be populated from other
-formats. <ulink url="http://www.navigon.com">www.navigon.com</ulink>
-         </para>
-    
diff --git a/xmldoc/formats/options/compegps-deficon.xml b/xmldoc/formats/options/compegps-deficon.xml
deleted file mode 100644 (file)
index 959502d..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-<para>
-This option specifies the default icon name on output.
-</para>
diff --git a/xmldoc/formats/options/compegps-index.xml b/xmldoc/formats/options/compegps-index.xml
deleted file mode 100644 (file)
index b82e931..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-<para>
-Because this format supports only one route or track, this option may be used 
-on output to select a single route or track from a collection of routes and
-tracks read from a more expressive format.  If you have, say, a 
-<link linkend="fmt_gpx">gpx</link> file that contains two routes, you may
-use this option to write them one at a time to individual files.
-</para>
-<para><userinput>gpsbabel -i gpx -f routes.gpx -o compegps,index=1 -F route1.txt -o compegps,index=2 -F route2.txt</userinput></para>
diff --git a/xmldoc/formats/options/compegps-radius.xml b/xmldoc/formats/options/compegps-radius.xml
deleted file mode 100644 (file)
index de60e1a..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-<para>
-This option specifies the default proximity for waypoints and route points.
-</para>
diff --git a/xmldoc/formats/options/compegps-snlen.xml b/xmldoc/formats/options/compegps-snlen.xml
deleted file mode 100644 (file)
index 54248cf..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-<para>
-This option specifies the default length for short names generated on output.
-The default length is 16.
-</para>
index e02e13c308d0584b41aa97864315430804d09123..ec142121be2a23a6a0fbff63c8d12d4fab09d1cc 100644 (file)
@@ -5,7 +5,7 @@
 </para>
 <para>
    Proximity distance is also supported by <link linkend="fmt_gpx">GPX</link>, <link linkend="fmt_gdb">Garmin GDB</link>, <link linkend="fmt_ozi">OZI Explorer</link>, 
-   <link linkend="fmt_compegps">CompeGPS</link> and <link linkend="fmt_unicsv">Universal CSV</link>.
+    and <link linkend="fmt_unicsv">Universal CSV</link>.
 </para>
 <para>
   <userinput>
diff --git a/xmldoc/formats/options/gopal-clean.xml b/xmldoc/formats/options/gopal-clean.xml
deleted file mode 100644 (file)
index d0089f5..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-<para>
-  Specifying the <option>clean</option> flag makes the Gopal reader pass
-  over the data and discard data that is probably incorrect such as the
-  longitude and latitude of "0".
-</para>
-<para>
-  If you happen to be a boater or pilot off the south short of Ghana,
-  you may disagree that coordinates of "0, 0" are bad.
-</para>
-
diff --git a/xmldoc/formats/options/gopal-date.xml b/xmldoc/formats/options/gopal-date.xml
deleted file mode 100644 (file)
index e3c6abd..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-<para>
-  This option is useful if you have tracks from Gopal that have been renamed.
-</para>
diff --git a/xmldoc/formats/options/gopal-maxspeed.xml b/xmldoc/formats/options/gopal-maxspeed.xml
deleted file mode 100644 (file)
index 06122fc..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-<para>
-  This is useful for removing wildly erroneous data from your recorded track.
-</para>
diff --git a/xmldoc/formats/options/gopal-minspeed.xml b/xmldoc/formats/options/gopal-minspeed.xml
deleted file mode 100644 (file)
index 13cf020..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-<para>
-  If this is greater than zero, duplicate waypoints will be removed.
-</para>
diff --git a/xmldoc/formats/options/mapsend-trkver.xml b/xmldoc/formats/options/mapsend-trkver.xml
deleted file mode 100644 (file)
index 5e54210..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-<para>
-This option sets the MapSend version to generate TRK files, 
-since new MapSend versions can't open version 3 files. 
-Valid values are 3 (MapSend v3.0) or 4 (MapSend v4.0 and v4.1).
-</para>
-    
diff --git a/xmldoc/formats/options/nmn4-index.xml b/xmldoc/formats/options/nmn4-index.xml
deleted file mode 100644 (file)
index e5fa3f1..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
-<para>
-Because the format supports only one route, this option may be used 
-on output to select a single route from a collection of 
-routes read from a more expressive format.  If you have, say, a 
-<link linkend="fmt_gpx">gpx</link> file that contains two routes, you may
-use this option to write them one at a time to individual files.
-</para>
-<para><userinput>gpsbabel -i gpx -f routes.gpx -o nmn4,index=1 -F route1.rte -o nmn4,index=2 -F route2.rte</userinput></para>
-
diff --git a/xmldoc/formats/options/pcx-cartoexploreur.xml b/xmldoc/formats/options/pcx-cartoexploreur.xml
deleted file mode 100644 (file)
index 17bc972..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-<para>
-  Carto Exploreur requires a slightly incompatible variation of the PCX format
-when written.  Specifying this option on write tells us to create that strain of PCX.
-</para>
diff --git a/xmldoc/formats/options/pcx-deficon.xml b/xmldoc/formats/options/pcx-deficon.xml
deleted file mode 100644 (file)
index 50c507e..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-<para>
-  The deficon option is used to control the icon output when writing to this format.   It overrides any icon information that might be present in the source data.
-</para>
diff --git a/xmldoc/formats/options/stmsdf-index.xml b/xmldoc/formats/options/stmsdf-index.xml
deleted file mode 100644 (file)
index 856048c..0000000
+++ /dev/null
@@ -1,15 +0,0 @@
-<para>
-       Convert route number 'index' from source into sdf format.
-</para>
-<para>
-       We have a lot of more expressive formats that support more than one route.
-       At this place sdf files are limited to only one single route. With option index
-       you can specify which route from source should be converted.
-</para>
-<para>
-       Our default index is 1.
-</para>
-<para>
-       This example will convert route number two and three into separate sdf files:
-</para>
-       <para><userinput> gpsbabel -i gdb -f routes.gdb -r -o stmsdf,index=2 -F route-one.sdf -r -o stmsdf,index=3 -F route-three.sdf </userinput></para>
diff --git a/xmldoc/formats/options/stmwpp-index.xml b/xmldoc/formats/options/stmwpp-index.xml
deleted file mode 100644 (file)
index c43659c..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
-<para>
-Because the format supports only one route or track, this option may be used 
-on output to select a single route or track from a collection of routes and
-tracks read from a more expressive format.  If you have, say, a 
-<link linkend="fmt_gpx">gpx</link> file that contains three routes, you may
-use this option to write them one at a time to individual files.
-</para>
-<para><userinput>gpsbabel -i gpx -f routes.gpx -o stmwpp,index=1 -F route1.txt -o stmwpp,index=2 -F route2.txt -o stmwpp,index=3 -F route3.txt</userinput></para>
-
diff --git a/xmldoc/formats/options/tiger-genurl.xml b/xmldoc/formats/options/tiger-genurl.xml
deleted file mode 100644 (file)
index d1ea87e..0000000
+++ /dev/null
@@ -1,20 +0,0 @@
-<para>
-genurl is a convenience option for generating the scaling parameters
-when accessing the Tiger servers.  It will output the latitude, longitude,
-height, and width parameters in a form suitable for use in the URL to generate
-a map that will hold all the points to be displayed  and is suitably scaled
-and centered.   
-</para>
-<para>For example:</para>
-<para><userinput>gpsbabel -i geo -f geocaching.loc -o tiger,genurl=tiger.ctr -F tiger.dat</userinput></para>
-<para>
-may create tiger.ctr with
-<screen format="linespecific">
-lat=36.042108&amp;lon=-86.877408&amp;ht=0.161172&amp;wid=0.591771&amp;iwd=768&amp;iht=768</screen>
-
-After uploading tiger.dat to a public server, a request to 
-<screen format="linespecific"> http://tiger.census.gov/cgi-bin/mapgen?murl=$THATFILE$(cat tiger.ctr)</screen>
-will return a gif file from the tiger server that's suitably scaled.
-
-</para>
-
diff --git a/xmldoc/formats/options/tiger-iconismarker.xml b/xmldoc/formats/options/tiger-iconismarker.xml
deleted file mode 100644 (file)
index 899aed5..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-<para> This options signifies that the icon in the incoming format is to be used
-without change in the generated Tiger output file.  Without this option,
-GPSBabel tries to color pins based on their creation time and certain 
-Geocaching traits when available.</para>
diff --git a/xmldoc/formats/options/tiger-margin.xml b/xmldoc/formats/options/tiger-margin.xml
deleted file mode 100644 (file)
index dd611fe..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
-<para>This option specifies a margin around the maps for the genurl options.
-The margin may be specified in either decimal degrees or as a 
-percentage.</para>
-<para>
-This option is most useful for ensuring there is adequate space for
-the label around the markers when generating automatically scaled maps.
-</para>
diff --git a/xmldoc/formats/options/tiger-newmarker.xml b/xmldoc/formats/options/tiger-newmarker.xml
deleted file mode 100644 (file)
index ec3af7c..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-<para>This option specifies the pin to be used if a waypoint has a creation
-time older than 'oldthresh' days.</para>
-<para>The default is "greenpin".</para>
diff --git a/xmldoc/formats/options/tiger-nolabels.xml b/xmldoc/formats/options/tiger-nolabels.xml
deleted file mode 100644 (file)
index 33ec2c1..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-<para>This option tells GPSBabel to not generate labels on the pins.   If
-this is true, the description of the incoming waypoints are ignored and not
-placed on the pins.</para>
diff --git a/xmldoc/formats/options/tiger-oldmarker.xml b/xmldoc/formats/options/tiger-oldmarker.xml
deleted file mode 100644 (file)
index abce81d..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-<para>This option specifies the pin to be used if a waypoint has a creation
-time newer than 'oldthresh' days.</para>
-<para>The default is "redpin".</para>
diff --git a/xmldoc/formats/options/tiger-oldthresh.xml b/xmldoc/formats/options/tiger-oldthresh.xml
deleted file mode 100644 (file)
index 9190263..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-<para>This options allows you to control the threshold in days between
-whether a pin is considered "new" (and thus potentially governed by the
-'newmarker' option) or "old" (and thus potentially governed by the 
-'oldmarker' option).
-</para>
diff --git a/xmldoc/formats/options/tiger-snlen.xml b/xmldoc/formats/options/tiger-snlen.xml
deleted file mode 100644 (file)
index ae39cd7..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-<para>
-The snlen option controls the maximum length of names generated by the '-s'
-option.  It's particularly useful in Tiger maps to avoid the amount of clutter
-generated by potentially lengthy labels on the markers.
-</para>
diff --git a/xmldoc/formats/options/tiger-suppresswhite.xml b/xmldoc/formats/options/tiger-suppresswhite.xml
deleted file mode 100644 (file)
index 6576ef4..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-<para>
-When set, this options tells the '-s' smartname generator to not allow 
-any spaces in the labels generated for markers.
-</para>
diff --git a/xmldoc/formats/options/tiger-unfoundmarker.xml b/xmldoc/formats/options/tiger-unfoundmarker.xml
deleted file mode 100644 (file)
index d9ff51a..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-<para> 
-  Specifies the icon type for unfound geocaches.  Default is "bluepin".
-</para>
diff --git a/xmldoc/formats/options/tiger-xpixels.xml b/xmldoc/formats/options/tiger-xpixels.xml
deleted file mode 100644 (file)
index a857af3..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-<para>The xpixels argument lets you specify the number of pixels to be
-generated by the Tiger server along the horizontal axis when using the 
-'genurl' option.  </para>
diff --git a/xmldoc/formats/options/tiger-ypixels.xml b/xmldoc/formats/options/tiger-ypixels.xml
deleted file mode 100644 (file)
index 846de24..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-<para>The ypixels argument lets you specify the number of pixels to be
-generated by the Tiger server along the vertical axis when using the
-'genurl' option.  </para>
-
diff --git a/xmldoc/formats/options/wfff-ahcicon.xml b/xmldoc/formats/options/wfff-ahcicon.xml
deleted file mode 100644 (file)
index 35d4550..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-<para>
-This options lets you specify an icon for an Ad-hoc, closed, waypoint.
-</para>
diff --git a/xmldoc/formats/options/wfff-ahoicon.xml b/xmldoc/formats/options/wfff-ahoicon.xml
deleted file mode 100644 (file)
index 5961bdc..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-
-<para>
-This options lets you specify an icon for an Ad-hoc, open, waypoint.
-</para>
diff --git a/xmldoc/formats/options/wfff-aicicon.xml b/xmldoc/formats/options/wfff-aicicon.xml
deleted file mode 100644 (file)
index 4fe063f..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-<para>
-This option lets you specify an icon for infrastructure closed points.
-</para>
diff --git a/xmldoc/formats/options/wfff-aioicon.xml b/xmldoc/formats/options/wfff-aioicon.xml
deleted file mode 100644 (file)
index 9bba545..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-
-<para>
-This option lets you specify an icon for infrastructure open points.
-</para>
diff --git a/xmldoc/formats/options/wfff-snmac.xml b/xmldoc/formats/options/wfff-snmac.xml
deleted file mode 100644 (file)
index d8ad469..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-<para>
-  This options lets you specify that the shortname of the waypoint is the MAC address.
-</para>
diff --git a/xmldoc/formats/options/yahoo-addrsep.xml b/xmldoc/formats/options/yahoo-addrsep.xml
deleted file mode 100644 (file)
index 249ca3c..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
-<para>
-This option specifies the string GPSBabel should use to separate the parts
-of the street address.  Since most other formats supported by GPSBabel do 
-not support street addresses, the street address fields from the Yahoo file
-are concatenated into the waypoint "notes" field.
-</para>
-<para>
-The default value for this option is a comma followed by a space (", ").
-</para>
diff --git a/xmldoc/formats/pcx.xml b/xmldoc/formats/pcx.xml
deleted file mode 100644 (file)
index 1c13e16..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
-      <para> Garmin documents only PCX5, an older format limited to
-the lame NMEA six-character waypoint names that's treated as a
-second-class citizen in current versions of MapSource.  In Mapsource,
-use file-&gt;import to read these files.  If you name the files *.wpt,
-Mapsource will find them more easily.
-</para>
-      <para> In general, you should prefer the "mapsource" file format
-to this one.
-</para>
-    <para>This format has been extended to handle many - but not all - 
-       files from <ulink url="http://www.gpsu.co.uk/index.html">GPS Utility</ulink>.  If you encounter something that GPSBabel does not handle well, use
-the free version of GPSUtil to read it and save as something more common.
-       </para>
diff --git a/xmldoc/formats/pocketfms_bc.xml b/xmldoc/formats/pocketfms_bc.xml
deleted file mode 100644 (file)
index c54e3f3..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-<para>
-   This format provides support for binary breadcrumb files from <ulink url="http://www.pocketfms.com">PocketFMS</ulink>. The default filename is GPS followed by the timestamp with no file extension. 
-</para>
-<para>
-   PocketFMS breadcrumbs files contain track information. That is latitude, longitude, altitude, speed, course, variation, separation, GPS error, fix type and timestamp. With exception of separation all info get processed by GPSBabel in both in and out direction.
-</para>
diff --git a/xmldoc/formats/pocketfms_fp.xml b/xmldoc/formats/pocketfms_fp.xml
deleted file mode 100644 (file)
index 4371864..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
-<para>
-   This format provides support for XML flightplans from <ulink url="http://www.pocketfms.com">PocketFMS</ulink>.  
-</para>
-<para>
-   PocketFMS XML flightplans contain route and waypoint information and much more flight planning info as airspaces, aircraft performance, fuel management etc. This format cannot be read by PocketFMS. Hence GPSBabel supports only input of route and waypoint information.
-</para>
-<para>
-    The PocketFMS flightplan converter take into account the -w waypoint flag. If set then additional waypoints are stored to the route point and path information. 
-</para>
diff --git a/xmldoc/formats/pocketfms_wp.xml b/xmldoc/formats/pocketfms_wp.xml
deleted file mode 100644 (file)
index 4f11e6d..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-<para>\r
-   This format provides support for the <ulink url="http://www.pocketfms.com">PocketFMS</ulink> user waypoints text file. \r
-</para>\r
-<para>\r
-   PocketFMS waypoint text files contain one waypoint per line. Any waypoint has name, latitude and longitude, separated by space. Latitude and longitude are either decimal degrees or degrees°minutes'seconds'' triples. For details see the PocketFMS help file. You can find more information at the <ulink url="http://www.pocketfms.com/phpBB3/">PocketFMS forum</ulink>. \r
-</para>\r
diff --git a/xmldoc/formats/skyforce.xml b/xmldoc/formats/skyforce.xml
deleted file mode 100644 (file)
index 8a75816..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
-<para>
-   This format provides support for ascii files from Skyforce PC interface for 
-   Skymap IIIC, Skymap II (Version 4) and KMD 150. Our module was developed 
-   from their interface description.
-</para>
-<para>
-   Each kind of our basic GPS data (waypoints, routes, and tracks) is 
-   stored in a separate file. Therefore you need three steps to 
-   convert a complex format like GPX or GDB into skyforce.
-   <userinput>
-      gpsbabel -i gpx -f file.gpx -o skyforce -w -F waypoints.txt -r -F routes.txt -t -F tracks.txt
-   </userinput>
-</para>
diff --git a/xmldoc/formats/stmsdf.xml b/xmldoc/formats/stmsdf.xml
deleted file mode 100644 (file)
index 0fb2740..0000000
+++ /dev/null
@@ -1,21 +0,0 @@
-<para>
-       This format supports the .sdf files from the Suunto product family
-       'Suunto Trek Manager', 'Suunto Ski Manager' and 'Suunto Sail Manager'.
-       The contents of the sdf file depends on the used product and can
-       be one route or one track. That's why when you want to use sdf on the
-       output side you have to use the
-       <link linkend="Route_And_Track_Modes">-r OR the -t</link> option. This will tell
-       GPSBabel which type of data should be written.
-</para>
-<para>
-       Currently we can read the following file types:
-       <simplelist columns="1">
-               <member>4 = M9 TrackLog</member>
-               <member>5 = Route</member>
-               <member>28 = X9 TrackLog</member>
-       </simplelist>
-</para>
-       <para><userinput>gpsbabel -i gpx -f some-routes.gpx -r -o stmsdf,index=3 -F single-route.sdf</userinput></para>
-<para>
-       <ulink url="http://www.suunto.fi">Suunto Website</ulink>
-</para>
diff --git a/xmldoc/formats/stmwpp.xml b/xmldoc/formats/stmwpp.xml
deleted file mode 100644 (file)
index e7129e7..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-<para>
-This format supports the Suunto Trek Manager (STM) WaypointPlus format.
-This is a simple format with coordinates and a time stamp.  Route points 
-also have a short name.  A single file may only contain one route or one
-track.
-</para>
-<para>
-<ulink url="http://www.suunto.fi">Suunto Website</ulink>
-</para>
-    
diff --git a/xmldoc/formats/tiger.xml b/xmldoc/formats/tiger.xml
deleted file mode 100644 (file)
index 0a736c0..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
-
-      
-      
-      <para>The U.S. Census Bureau provides online mapping facilities.
-This format is described at: <ulink url="http://tiger.census.gov/instruct.html">tiger.census.gov</ulink>.
-Do notice that this format is not the actual Tiger line mapping
-records, but rather the interface to their online mapping
-program.</para>
-    
diff --git a/xmldoc/formats/vidaone.xml b/xmldoc/formats/vidaone.xml
deleted file mode 100644 (file)
index 8cf1447..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
-<para>
-  This format supports the <ulink url="http://www.vidaone.com">VidaOne</ulink> GPS for pocket PC GPB file type.
-</para>
-<para>
-  This is have a very simple binary format which stores only the coordinates 
-  in the tracklog (.gpb) files.
-</para>
diff --git a/xmldoc/formats/vitosmt.xml b/xmldoc/formats/vitosmt.xml
deleted file mode 100644 (file)
index 31b80dd..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-
-      
-      
-      <para>Vito Navigator II is a Pocket PC GPS application.  This
-format reads a Vito Navigator II .SMT track file and can work in
-either waypoint or track mode.  The speed, heading and Dilution of
-Position data is written in the notes field.</para>
-      <para> Support for writing .SMT tracks is very experimental and
-may crash VitoNavigator II on the Pocket PC.</para>
-    
diff --git a/xmldoc/formats/vitovtt.xml b/xmldoc/formats/vitovtt.xml
deleted file mode 100644 (file)
index 097cbee..0000000
+++ /dev/null
@@ -1,117 +0,0 @@
-<para>
-  This format reads the binary (.vtt) track logs recorded by
-  <ulink url="http://vitotechnology.com/en/products/smartmap_nokia_series60.html">
-  <application>VITO SmartMap for Nokia Series 60</application>
-  </ulink> 1.0, a GPS application for smartphones connected to
-  NMEA 0183-compatible Bluetooth GPS receivers. It may work
-  with .vtt files produced by versions of VITO SmartMap
-  for other platforms.
-</para>
-
-<para>
-  This format was reverse engineered from a .vtt file.
-  Currently, the coordinates, altitude, and time are
-  available for each point recorded in a track.
-  The course speed and heading fields have been identified,
-  but the units are not certain and so those fields are ignored.
-  The rest of the entry has not yet been decoded. The format
-  uses little-endian byte ordering. The application displays
-  metric units by default. Time is UTC.
-</para>
-
-<table id="vito_header">
-  <title>Vito SmartMap track file header (8 bytes)</title>
-  <tgroup cols="2">
-  <thead>
-    <row>
-      <entry>Position</entry>
-      <entry>Field info</entry>
-    </row>
-  </thead>
-  <tbody>
-    <row>
-      <entry>bytes 0-3</entry>
-      <entry>Probably a version field. Int value is 3 in sample file.</entry>
-    </row>
-    <row>
-      <entry>bytes 4-7</entry>
-      <entry>Number of points in file as int.</entry>
-    </row>
-  </tbody>
-  </tgroup>
-</table>
-
-<table id="vito_point">
-  <title>Vito SmartMap track point (32 bytes)</title>
-  <tgroup cols="2">
-  <thead>
-    <row>
-      <entry>Position</entry>
-      <entry>Field info</entry>
-    </row>
-  </thead>
-  <tbody>
-    <row>
-      <entry>bytes 0-3</entry>
-      <entry>Decimal latitude multiplied by 20000000 as int.</entry>
-    </row>
-    <row>
-      <entry>bytes 4-7</entry>
-      <entry>Decimal longitude multiplied by 10000000 as int.</entry>
-    </row>
-    <row>
-      <entry>bytes 8-11</entry>
-      <entry>Altitude in meters as float.</entry>
-    </row>
-    <row>
-      <entry>bytes 12-13</entry>
-      <entry>Year, with century, as int.</entry>
-    </row>
-    <row>
-      <entry>byte 14</entry>
-      <entry>Month, ranging 1-12.</entry>
-    </row>
-    <row>
-      <entry>byte 15</entry>
-      <entry>Day of month, ranging 1-31.</entry>
-    </row>
-    <row>
-      <entry>byte 16</entry>
-      <entry>Hour, ranging 0-23.</entry>
-    </row>
-    <row>
-      <entry>byte 17</entry>
-      <entry>Minute, ranging 0-59.</entry>
-    </row>
-    <row>
-      <entry>bytes 18-21</entry>
-      <entry>Decimal second multiplied by 30000000 as int.</entry>
-    </row>
-    <row>
-      <entry>bytes 22-25</entry>
-      <entry>
-        Probably speed in meters per second as float.
-        Ranges 0-~3 in file, seems reasonable since sample
-        file was acquired on foot.
-      </entry>
-    </row>
-    <row>
-      <entry>bytes 26-27</entry>
-      <entry>
-        Probably decimal heading multiplied by something.
-        Ranges between min and max values possible when
-        decoded as integer. Doesn't change when speed field is 0.
-        Doesn't change smoothly, jumps around a bit.
-      </entry>
-    </row>
-    <row>
-      <entry>bytes 28-31</entry>
-      <entry>
-        Status field of some kind. Changes only twice in file.
-        May contain satellite count or PDOP info, as both are
-        reported by the application's GUI.
-      </entry>
-    </row>
-  </tbody>
-  </tgroup>
-</table>
diff --git a/xmldoc/formats/vpl.xml b/xmldoc/formats/vpl.xml
deleted file mode 100644 (file)
index b3d8f8c..0000000
+++ /dev/null
@@ -1,42 +0,0 @@
-<para>
-       This is the log format output by factory-installed Honda/Acura (Alpine) Navigation Systems 
-       in (at least) 2006 models and newer.  (Though I've seen indirect data that says that Acura 
-       nav systems at least as far back as 2004 use it too)
-</para>
-<para>
-       This format is definitely known to work with the following model cars specifically:
-</para>
-<simplelist columns="1">
-<member>
-       2006 Honda Civic Hybrid
-</member>
-</simplelist>
-<para>
-       Logging may be enabled by simultaneously holding down the MAP/GUIDE, MENU, and CANCEL
-       buttons for 3-5 seconds, then selecting "Functional Setup", "Log Data".  A PCMCIA card
-       must be inserted into the system (behind the Nav LCD) for logging to work.  (The system
-       can read MP3/WMA files on this card and will also write logs to it.  Generally, a
-       PCMCIA to CF or PCMCIA to SD adapter is used with a corresponding CF/SD card)  With
-       logging successfully set up, the system will create a directory named "VPlog" off the
-       root of the card.  Inside this directory, files will be created with names corresponding
-       to the date and time of engine start, in GMT.  (YYMMDD_HHMM.vpl)
-</para>
-<para>
-       The VPL format contains quite a bit of data, much of which remains undecoded.  This format
-       currently reads only lat/lon, altitude, speed, heading, date/time, visible sats, HDOP and
-       VDOP.
-</para>
-<para>
-       Generally, the layout of the format seems similar to NMEA, with discrete sentences
-       containing different fields of data, followed by a 1-byte XOR'd checksum.  Some sentences
-       are generated only once per engine start, others every few seconds, many every second,
-       and a few on the order of five and in one case, up to twenty five times per second.  All data in
-       the file is written in ASCII; most of it simply as hexadecimal characters.  Most
-       fields are fixed width, though a few can be variable.  (Those that are variable
-       have a field count as the first field after their sentence identifier)  Currently,
-       only the '75'-sentence is processed (and only about 70% of it), though this provides all
-       the data necessary for position information.
-
-       Some fields in other sentences have been decoded, but they are not currently processed.
-       Information on the data in these fields can be found in vpl.c.
-</para>
diff --git a/xmldoc/formats/wfff.xml b/xmldoc/formats/wfff.xml
deleted file mode 100644 (file)
index ac5ebaf..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
-
-       
-        
-       <para> WFFF is the export format for <ulink url="http://www.aspecto-software.com/rw/applications/wififofum/index.html">Aspecto Software's WiFiFoFum</ulink> 2.0 for Windows Mobile PCs.</para>
-       <para>It is a simple XML format that is read-only to GPSBabel and stores information about a WiFi stumbling session.</para>
-       <para>All WiFi-specific elements are written in the description  field, similar to the netstumbler format.</para>
-       
diff --git a/xmldoc/formats/yahoo.xml b/xmldoc/formats/yahoo.xml
deleted file mode 100644 (file)
index af37935..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
-<para>
-This format reads output from the 
-<ulink url="http://developer.yahoo.com/maps/rest/V1/geocode.html">Yahoo geocoding API</ulink>.  
-This feature of GPSBabel makes it easy to get geocoded results from 
-Yahoo into your favorite mapping program, GPS receiver, or other format.
-</para>
-
diff --git a/yahoo.cc b/yahoo.cc
deleted file mode 100644 (file)
index 8b02367..0000000
--- a/yahoo.cc
+++ /dev/null
@@ -1,82 +0,0 @@
-/*
-    Read Yahoo Geocoded files.
-
-    Copyright (C) 2005 Robert Lipe, robertlipe+source@gpsbabel.org
-
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with this program; if not, write to the Free Software
-    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
-
- */
-
-
-#include <QXmlStreamAttributes>         // for QXmlStreamAttributes
-
-#include "defs.h"
-#include "yahoo.h"
-#include "xmlgeneric.h"                 // for xg_string, build_xg_tag_map, xml_deinit, xml_init, xml_read
-
-
-#define MYNAME "yahoo"
-
-void
-YahooFormat::rd_init(const QString& fname)
-{
-  xml_init(fname, build_xg_tag_map(this, gl_map), nullptr, nullptr, nullptr, true);
-}
-
-void
-YahooFormat::read()
-{
-  xml_read();
-}
-
-void
-YahooFormat::rd_deinit()
-{
-  xml_deinit();
-}
-
-void
-YahooFormat::wpt_s(xg_string, const QXmlStreamAttributes*)
-{
-  wpt_tmp = new Waypoint;
-}
-
-void
-YahooFormat::wpt_e(xg_string, const QXmlStreamAttributes*)
-{
-  waypt_add(wpt_tmp);
-  wpt_tmp = nullptr;
-}
-
-void
-YahooFormat::wpt_lat(xg_string args, const QXmlStreamAttributes*)
-{
-  wpt_tmp->latitude = args.toDouble();
-}
-
-void
-YahooFormat::wpt_lon(xg_string args, const QXmlStreamAttributes*)
-{
-  wpt_tmp->longitude = args.toDouble();
-}
-
-void
-YahooFormat::wpt_addr(xg_string args, const QXmlStreamAttributes*)
-{
-  if (!wpt_tmp->notes.isEmpty()) {
-    wpt_tmp->notes += as;
-  }
-  wpt_tmp->notes += args;
-}
diff --git a/yahoo.h b/yahoo.h
deleted file mode 100644 (file)
index bc0e355..0000000
--- a/yahoo.h
+++ /dev/null
@@ -1,100 +0,0 @@
-/*
-    Read Yahoo Geocoded files.
-
-    Copyright (C) 2002-2020 Robert Lipe, gpsbabel.org
-
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with this program; if not, write to the Free Software
-    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
-
- */
-#ifndef YAHOO_H_INCLUDED_
-#define YAHOO_H_INCLUDED_
-
-#include <QList>                        // for QList
-#include <QString>                      // for QString
-#include <QVector>                      // for QVector
-#include <QXmlStreamAttributes>         // for QXmlStreamAttributes
-
-#include "defs.h"
-#include "format.h"                     // for Format
-#include "xmlgeneric.h"                 // for xg_tag_map_entry, cb_cdata, XgFunctor, cb_end, cb_start
-
-class YahooFormat : public Format
-{
-public:
-  QVector<arglist_t>* get_args() override
-  {
-    return &yahoo_args;
-  }
-
-  ff_type get_type() const override
-  {
-    return ff_type_file;
-  }
-
-  QVector<ff_cap> get_cap() const override
-  {
-    return {
-      ff_cap_read,  // waypoints
-      ff_cap_none,  // tracks
-      ff_cap_none   // routes
-    };
-  }
-
-  QString get_encode() const override
-  {
-    return CET_CHARSET_ASCII;
-  }
-
-  int get_fixed_encode() const override
-  {
-    return 0;
-  }
-
-  void rd_init(const QString&) override;
-  void read() override;
-  void rd_deinit() override;
-
-private:
-  Waypoint* wpt_tmp{};
-  char* as{};
-
-  QVector<arglist_t> yahoo_args = {
-    {
-      "addrsep", &as,
-      "String to separate concatenated address fields (default=\", \")",
-      ", ", ARGTYPE_STRING, ARG_NOMINMAX, nullptr
-    },
-  };
-
-  void wpt_s(const QString&, const QXmlStreamAttributes*);
-  void wpt_e(const QString&, const QXmlStreamAttributes*);
-  void wpt_lat(const QString&, const QXmlStreamAttributes*);
-  void wpt_lon(const QString&, const QXmlStreamAttributes*);
-  void wpt_addr(const QString&, const QXmlStreamAttributes*);
-
-  QList<xg_functor_map_entry<YahooFormat>> gl_map = {
-    {&YahooFormat::wpt_s, cb_start, "/ResultSet/Result"},
-    {&YahooFormat::wpt_lat, cb_cdata, "/ResultSet/Result/Latitude"},
-    {&YahooFormat::wpt_lon, cb_cdata, "/ResultSet/Result/Longitude"},
-    {&YahooFormat::wpt_addr, cb_cdata, "/ResultSet/Result/Address"},
-    {&YahooFormat::wpt_addr, cb_cdata, "/ResultSet/Result/City"},
-    {&YahooFormat::wpt_addr, cb_cdata, "/ResultSet/Result/State"},
-    {&YahooFormat::wpt_addr, cb_cdata, "/ResultSet/Result/Zip"},
-    {&YahooFormat::wpt_addr, cb_cdata, "/ResultSet/Result/Country"},
-    {&YahooFormat::wpt_e, cb_end, "/ResultSet/Result"}
-  };
-};
-
-#endif //  YAHOO_H_INCLUDED_